@angular/common 18.2.5 → 18.2.7
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/LICENSE +21 -0
- package/esm2022/http/index.mjs +2 -2
- package/esm2022/http/public_api.mjs +2 -2
- package/esm2022/http/src/backend.mjs +2 -2
- package/esm2022/http/src/client.mjs +5 -5
- package/esm2022/http/src/context.mjs +2 -2
- package/esm2022/http/src/errors.mjs +2 -2
- package/esm2022/http/src/fetch.mjs +5 -5
- package/esm2022/http/src/headers.mjs +2 -2
- package/esm2022/http/src/interceptor.mjs +5 -5
- package/esm2022/http/src/jsonp.mjs +10 -8
- package/esm2022/http/src/module.mjs +14 -14
- package/esm2022/http/src/params.mjs +2 -2
- package/esm2022/http/src/private_export.mjs +2 -2
- package/esm2022/http/src/provider.mjs +2 -2
- package/esm2022/http/src/request.mjs +2 -2
- package/esm2022/http/src/response.mjs +2 -2
- package/esm2022/http/src/transfer_cache.mjs +2 -2
- package/esm2022/http/src/xhr.mjs +5 -5
- package/esm2022/http/src/xsrf.mjs +8 -8
- package/esm2022/http/testing/index.mjs +2 -2
- package/esm2022/http/testing/public_api.mjs +2 -2
- package/esm2022/http/testing/src/api.mjs +2 -2
- package/esm2022/http/testing/src/backend.mjs +5 -5
- package/esm2022/http/testing/src/module.mjs +6 -6
- package/esm2022/http/testing/src/provider.mjs +2 -2
- package/esm2022/http/testing/src/request.mjs +2 -2
- package/esm2022/index.mjs +2 -2
- package/esm2022/public_api.mjs +2 -2
- package/esm2022/src/common.mjs +2 -2
- package/esm2022/src/common_module.mjs +6 -6
- package/esm2022/src/cookie.mjs +2 -2
- package/esm2022/src/directives/index.mjs +2 -2
- package/esm2022/src/directives/ng_class.mjs +5 -5
- package/esm2022/src/directives/ng_component_outlet.mjs +5 -5
- package/esm2022/src/directives/ng_for_of.mjs +5 -5
- package/esm2022/src/directives/ng_if.mjs +5 -5
- package/esm2022/src/directives/ng_optimized_image/asserts.mjs +2 -2
- package/esm2022/src/directives/ng_optimized_image/error_helper.mjs +2 -2
- package/esm2022/src/directives/ng_optimized_image/image_loaders/cloudflare_loader.mjs +2 -2
- package/esm2022/src/directives/ng_optimized_image/image_loaders/cloudinary_loader.mjs +2 -2
- package/esm2022/src/directives/ng_optimized_image/image_loaders/constants.mjs +2 -2
- package/esm2022/src/directives/ng_optimized_image/image_loaders/image_loader.mjs +2 -2
- package/esm2022/src/directives/ng_optimized_image/image_loaders/imagekit_loader.mjs +2 -2
- package/esm2022/src/directives/ng_optimized_image/image_loaders/imgix_loader.mjs +2 -2
- package/esm2022/src/directives/ng_optimized_image/image_loaders/netlify_loader.mjs +2 -2
- package/esm2022/src/directives/ng_optimized_image/index.mjs +2 -2
- package/esm2022/src/directives/ng_optimized_image/lcp_image_observer.mjs +5 -5
- package/esm2022/src/directives/ng_optimized_image/ng_optimized_image.mjs +29 -9
- package/esm2022/src/directives/ng_optimized_image/preconnect_link_checker.mjs +5 -5
- package/esm2022/src/directives/ng_optimized_image/preload-link-creator.mjs +5 -5
- package/esm2022/src/directives/ng_optimized_image/tokens.mjs +2 -2
- package/esm2022/src/directives/ng_optimized_image/url.mjs +2 -2
- package/esm2022/src/directives/ng_plural.mjs +8 -8
- package/esm2022/src/directives/ng_style.mjs +5 -5
- package/esm2022/src/directives/ng_switch.mjs +11 -11
- package/esm2022/src/directives/ng_template_outlet.mjs +5 -5
- package/esm2022/src/dom_adapter.mjs +2 -2
- package/esm2022/src/dom_tokens.mjs +2 -2
- package/esm2022/src/errors.mjs +2 -2
- package/esm2022/src/i18n/currencies.mjs +2 -2
- package/esm2022/src/i18n/format_date.mjs +2 -2
- package/esm2022/src/i18n/format_number.mjs +2 -2
- package/esm2022/src/i18n/locale_data.mjs +2 -2
- package/esm2022/src/i18n/locale_data_api.mjs +2 -2
- package/esm2022/src/i18n/localization.mjs +8 -8
- package/esm2022/src/location/hash_location_strategy.mjs +5 -5
- package/esm2022/src/location/index.mjs +2 -2
- package/esm2022/src/location/location.mjs +5 -5
- package/esm2022/src/location/location_strategy.mjs +9 -9
- package/esm2022/src/location/platform_location.mjs +8 -8
- package/esm2022/src/location/util.mjs +2 -2
- package/esm2022/src/navigation/navigation_types.mjs +2 -2
- package/esm2022/src/navigation/platform_navigation.mjs +5 -5
- package/esm2022/src/pipes/async_pipe.mjs +5 -5
- package/esm2022/src/pipes/case_conversion_pipes.mjs +11 -11
- package/esm2022/src/pipes/date_pipe.mjs +5 -5
- package/esm2022/src/pipes/date_pipe_config.mjs +2 -2
- package/esm2022/src/pipes/i18n_plural_pipe.mjs +5 -5
- package/esm2022/src/pipes/i18n_select_pipe.mjs +5 -5
- package/esm2022/src/pipes/index.mjs +2 -2
- package/esm2022/src/pipes/invalid_pipe_argument_error.mjs +2 -2
- package/esm2022/src/pipes/json_pipe.mjs +5 -5
- package/esm2022/src/pipes/keyvalue_pipe.mjs +5 -5
- package/esm2022/src/pipes/number_pipe.mjs +11 -11
- package/esm2022/src/pipes/slice_pipe.mjs +5 -5
- package/esm2022/src/platform_id.mjs +2 -2
- package/esm2022/src/private_export.mjs +2 -2
- package/esm2022/src/version.mjs +3 -3
- package/esm2022/src/viewport_scroller.mjs +2 -2
- package/esm2022/src/xhr.mjs +2 -2
- package/esm2022/testing/index.mjs +2 -2
- package/esm2022/testing/public_api.mjs +2 -2
- package/esm2022/testing/src/location_mock.mjs +5 -5
- package/esm2022/testing/src/mock_location_strategy.mjs +5 -5
- package/esm2022/testing/src/mock_platform_location.mjs +8 -8
- package/esm2022/testing/src/navigation/fake_navigation.mjs +2 -2
- package/esm2022/testing/src/navigation/navigation_types.mjs +2 -2
- package/esm2022/testing/src/navigation/provide_fake_platform_navigation.mjs +2 -2
- package/esm2022/testing/src/private_export.mjs +2 -2
- package/esm2022/testing/src/provide_location_mocks.mjs +2 -2
- package/esm2022/testing/src/testing.mjs +2 -2
- package/esm2022/upgrade/index.mjs +2 -2
- package/esm2022/upgrade/public_api.mjs +2 -2
- package/esm2022/upgrade/src/index.mjs +2 -2
- package/esm2022/upgrade/src/location_shim.mjs +2 -2
- package/esm2022/upgrade/src/location_upgrade_module.mjs +6 -6
- package/esm2022/upgrade/src/params.mjs +2 -2
- package/esm2022/upgrade/src/utils.mjs +2 -2
- package/fesm2022/common.mjs +142 -122
- package/fesm2022/common.mjs.map +1 -1
- package/fesm2022/http/testing.mjs +8 -8
- package/fesm2022/http/testing.mjs.map +1 -1
- package/fesm2022/http.mjs +39 -37
- package/fesm2022/http.mjs.map +1 -1
- package/fesm2022/testing.mjs +16 -16
- package/fesm2022/testing.mjs.map +1 -1
- package/fesm2022/upgrade.mjs +5 -5
- package/fesm2022/upgrade.mjs.map +1 -1
- package/http/index.d.ts +1 -1
- package/http/testing/index.d.ts +1 -1
- package/index.d.ts +2 -2
- package/locales/af-NA.d.ts +1 -1
- package/locales/af-NA.mjs +2 -2
- package/locales/af.d.ts +1 -1
- package/locales/af.mjs +2 -2
- package/locales/agq.d.ts +1 -1
- package/locales/agq.mjs +2 -2
- package/locales/ak.d.ts +1 -1
- package/locales/ak.mjs +2 -2
- package/locales/am.d.ts +1 -1
- package/locales/am.mjs +2 -2
- package/locales/ar-AE.d.ts +1 -1
- package/locales/ar-AE.mjs +2 -2
- package/locales/ar-BH.d.ts +1 -1
- package/locales/ar-BH.mjs +2 -2
- package/locales/ar-DJ.d.ts +1 -1
- package/locales/ar-DJ.mjs +2 -2
- package/locales/ar-DZ.d.ts +1 -1
- package/locales/ar-DZ.mjs +2 -2
- package/locales/ar-EG.d.ts +1 -1
- package/locales/ar-EG.mjs +2 -2
- package/locales/ar-EH.d.ts +1 -1
- package/locales/ar-EH.mjs +2 -2
- package/locales/ar-ER.d.ts +1 -1
- package/locales/ar-ER.mjs +2 -2
- package/locales/ar-IL.d.ts +1 -1
- package/locales/ar-IL.mjs +2 -2
- package/locales/ar-IQ.d.ts +1 -1
- package/locales/ar-IQ.mjs +2 -2
- package/locales/ar-JO.d.ts +1 -1
- package/locales/ar-JO.mjs +2 -2
- package/locales/ar-KM.d.ts +1 -1
- package/locales/ar-KM.mjs +2 -2
- package/locales/ar-KW.d.ts +1 -1
- package/locales/ar-KW.mjs +2 -2
- package/locales/ar-LB.d.ts +1 -1
- package/locales/ar-LB.mjs +2 -2
- package/locales/ar-LY.d.ts +1 -1
- package/locales/ar-LY.mjs +2 -2
- package/locales/ar-MA.d.ts +1 -1
- package/locales/ar-MA.mjs +2 -2
- package/locales/ar-MR.d.ts +1 -1
- package/locales/ar-MR.mjs +2 -2
- package/locales/ar-OM.d.ts +1 -1
- package/locales/ar-OM.mjs +2 -2
- package/locales/ar-PS.d.ts +1 -1
- package/locales/ar-PS.mjs +2 -2
- package/locales/ar-QA.d.ts +1 -1
- package/locales/ar-QA.mjs +2 -2
- package/locales/ar-SA.d.ts +1 -1
- package/locales/ar-SA.mjs +2 -2
- package/locales/ar-SD.d.ts +1 -1
- package/locales/ar-SD.mjs +2 -2
- package/locales/ar-SO.d.ts +1 -1
- package/locales/ar-SO.mjs +2 -2
- package/locales/ar-SS.d.ts +1 -1
- package/locales/ar-SS.mjs +2 -2
- package/locales/ar-SY.d.ts +1 -1
- package/locales/ar-SY.mjs +2 -2
- package/locales/ar-TD.d.ts +1 -1
- package/locales/ar-TD.mjs +2 -2
- package/locales/ar-TN.d.ts +1 -1
- package/locales/ar-TN.mjs +2 -2
- package/locales/ar-YE.d.ts +1 -1
- package/locales/ar-YE.mjs +2 -2
- package/locales/ar.d.ts +1 -1
- package/locales/ar.mjs +2 -2
- package/locales/as.d.ts +1 -1
- package/locales/as.mjs +2 -2
- package/locales/asa.d.ts +1 -1
- package/locales/asa.mjs +2 -2
- package/locales/ast.d.ts +1 -1
- package/locales/ast.mjs +2 -2
- package/locales/az-Cyrl.d.ts +1 -1
- package/locales/az-Cyrl.mjs +2 -2
- package/locales/az-Latn.d.ts +1 -1
- package/locales/az-Latn.mjs +2 -2
- package/locales/az.d.ts +1 -1
- package/locales/az.mjs +2 -2
- package/locales/bas.d.ts +1 -1
- package/locales/bas.mjs +2 -2
- package/locales/be-tarask.d.ts +1 -1
- package/locales/be-tarask.mjs +2 -2
- package/locales/be.d.ts +1 -1
- package/locales/be.mjs +2 -2
- package/locales/bem.d.ts +1 -1
- package/locales/bem.mjs +2 -2
- package/locales/bez.d.ts +1 -1
- package/locales/bez.mjs +2 -2
- package/locales/bg.d.ts +1 -1
- package/locales/bg.mjs +2 -2
- package/locales/bm.d.ts +1 -1
- package/locales/bm.mjs +2 -2
- package/locales/bn-IN.d.ts +1 -1
- package/locales/bn-IN.mjs +2 -2
- package/locales/bn.d.ts +1 -1
- package/locales/bn.mjs +2 -2
- package/locales/bo-IN.d.ts +1 -1
- package/locales/bo-IN.mjs +2 -2
- package/locales/bo.d.ts +1 -1
- package/locales/bo.mjs +2 -2
- package/locales/br.d.ts +1 -1
- package/locales/br.mjs +2 -2
- package/locales/brx.d.ts +1 -1
- package/locales/brx.mjs +2 -2
- package/locales/bs-Cyrl.d.ts +1 -1
- package/locales/bs-Cyrl.mjs +2 -2
- package/locales/bs-Latn.d.ts +1 -1
- package/locales/bs-Latn.mjs +2 -2
- package/locales/bs.d.ts +1 -1
- package/locales/bs.mjs +2 -2
- package/locales/ca-AD.d.ts +1 -1
- package/locales/ca-AD.mjs +2 -2
- package/locales/ca-ES-valencia.d.ts +1 -1
- package/locales/ca-ES-valencia.mjs +2 -2
- package/locales/ca-FR.d.ts +1 -1
- package/locales/ca-FR.mjs +2 -2
- package/locales/ca-IT.d.ts +1 -1
- package/locales/ca-IT.mjs +2 -2
- package/locales/ca.d.ts +1 -1
- package/locales/ca.mjs +2 -2
- package/locales/ccp-IN.d.ts +1 -1
- package/locales/ccp-IN.mjs +2 -2
- package/locales/ccp.d.ts +1 -1
- package/locales/ccp.mjs +2 -2
- package/locales/ce.d.ts +1 -1
- package/locales/ce.mjs +2 -2
- package/locales/ceb.d.ts +1 -1
- package/locales/ceb.mjs +2 -2
- package/locales/cgg.d.ts +1 -1
- package/locales/cgg.mjs +2 -2
- package/locales/chr.d.ts +1 -1
- package/locales/chr.mjs +2 -2
- package/locales/ckb-IR.d.ts +1 -1
- package/locales/ckb-IR.mjs +2 -2
- package/locales/ckb.d.ts +1 -1
- package/locales/ckb.mjs +2 -2
- package/locales/cs.d.ts +1 -1
- package/locales/cs.mjs +2 -2
- package/locales/cy.d.ts +1 -1
- package/locales/cy.mjs +2 -2
- package/locales/da-GL.d.ts +1 -1
- package/locales/da-GL.mjs +2 -2
- package/locales/da.d.ts +1 -1
- package/locales/da.mjs +2 -2
- package/locales/dav.d.ts +1 -1
- package/locales/dav.mjs +2 -2
- package/locales/de-AT.d.ts +1 -1
- package/locales/de-AT.mjs +2 -2
- package/locales/de-BE.d.ts +1 -1
- package/locales/de-BE.mjs +2 -2
- package/locales/de-CH.d.ts +1 -1
- package/locales/de-CH.mjs +2 -2
- package/locales/de-IT.d.ts +1 -1
- package/locales/de-IT.mjs +2 -2
- package/locales/de-LI.d.ts +1 -1
- package/locales/de-LI.mjs +2 -2
- package/locales/de-LU.d.ts +1 -1
- package/locales/de-LU.mjs +2 -2
- package/locales/de.d.ts +1 -1
- package/locales/de.mjs +2 -2
- package/locales/dje.d.ts +1 -1
- package/locales/dje.mjs +2 -2
- package/locales/doi.d.ts +1 -1
- package/locales/doi.mjs +2 -2
- package/locales/dsb.d.ts +1 -1
- package/locales/dsb.mjs +2 -2
- package/locales/dua.d.ts +1 -1
- package/locales/dua.mjs +2 -2
- package/locales/dyo.d.ts +1 -1
- package/locales/dyo.mjs +2 -2
- package/locales/dz.d.ts +1 -1
- package/locales/dz.mjs +2 -2
- package/locales/ebu.d.ts +1 -1
- package/locales/ebu.mjs +2 -2
- package/locales/ee-TG.d.ts +1 -1
- package/locales/ee-TG.mjs +2 -2
- package/locales/ee.d.ts +1 -1
- package/locales/ee.mjs +2 -2
- package/locales/el-CY.d.ts +1 -1
- package/locales/el-CY.mjs +2 -2
- package/locales/el.d.ts +1 -1
- package/locales/el.mjs +2 -2
- package/locales/en-001.d.ts +1 -1
- package/locales/en-001.mjs +2 -2
- package/locales/en-150.d.ts +1 -1
- package/locales/en-150.mjs +2 -2
- package/locales/en-AE.d.ts +1 -1
- package/locales/en-AE.mjs +2 -2
- package/locales/en-AG.d.ts +1 -1
- package/locales/en-AG.mjs +2 -2
- package/locales/en-AI.d.ts +1 -1
- package/locales/en-AI.mjs +2 -2
- package/locales/en-AS.d.ts +1 -1
- package/locales/en-AS.mjs +2 -2
- package/locales/en-AT.d.ts +1 -1
- package/locales/en-AT.mjs +2 -2
- package/locales/en-AU.d.ts +1 -1
- package/locales/en-AU.mjs +2 -2
- package/locales/en-BB.d.ts +1 -1
- package/locales/en-BB.mjs +2 -2
- package/locales/en-BE.d.ts +1 -1
- package/locales/en-BE.mjs +2 -2
- package/locales/en-BI.d.ts +1 -1
- package/locales/en-BI.mjs +2 -2
- package/locales/en-BM.d.ts +1 -1
- package/locales/en-BM.mjs +2 -2
- package/locales/en-BS.d.ts +1 -1
- package/locales/en-BS.mjs +2 -2
- package/locales/en-BW.d.ts +1 -1
- package/locales/en-BW.mjs +2 -2
- package/locales/en-BZ.d.ts +1 -1
- package/locales/en-BZ.mjs +2 -2
- package/locales/en-CA.d.ts +1 -1
- package/locales/en-CA.mjs +2 -2
- package/locales/en-CC.d.ts +1 -1
- package/locales/en-CC.mjs +2 -2
- package/locales/en-CH.d.ts +1 -1
- package/locales/en-CH.mjs +2 -2
- package/locales/en-CK.d.ts +1 -1
- package/locales/en-CK.mjs +2 -2
- package/locales/en-CM.d.ts +1 -1
- package/locales/en-CM.mjs +2 -2
- package/locales/en-CX.d.ts +1 -1
- package/locales/en-CX.mjs +2 -2
- package/locales/en-CY.d.ts +1 -1
- package/locales/en-CY.mjs +2 -2
- package/locales/en-DE.d.ts +1 -1
- package/locales/en-DE.mjs +2 -2
- package/locales/en-DG.d.ts +1 -1
- package/locales/en-DG.mjs +2 -2
- package/locales/en-DK.d.ts +1 -1
- package/locales/en-DK.mjs +2 -2
- package/locales/en-DM.d.ts +1 -1
- package/locales/en-DM.mjs +2 -2
- package/locales/en-ER.d.ts +1 -1
- package/locales/en-ER.mjs +2 -2
- package/locales/en-FI.d.ts +1 -1
- package/locales/en-FI.mjs +2 -2
- package/locales/en-FJ.d.ts +1 -1
- package/locales/en-FJ.mjs +2 -2
- package/locales/en-FK.d.ts +1 -1
- package/locales/en-FK.mjs +2 -2
- package/locales/en-FM.d.ts +1 -1
- package/locales/en-FM.mjs +2 -2
- package/locales/en-GB.d.ts +1 -1
- package/locales/en-GB.mjs +2 -2
- package/locales/en-GD.d.ts +1 -1
- package/locales/en-GD.mjs +2 -2
- package/locales/en-GG.d.ts +1 -1
- package/locales/en-GG.mjs +2 -2
- package/locales/en-GH.d.ts +1 -1
- package/locales/en-GH.mjs +2 -2
- package/locales/en-GI.d.ts +1 -1
- package/locales/en-GI.mjs +2 -2
- package/locales/en-GM.d.ts +1 -1
- package/locales/en-GM.mjs +2 -2
- package/locales/en-GU.d.ts +1 -1
- package/locales/en-GU.mjs +2 -2
- package/locales/en-GY.d.ts +1 -1
- package/locales/en-GY.mjs +2 -2
- package/locales/en-HK.d.ts +1 -1
- package/locales/en-HK.mjs +2 -2
- package/locales/en-IE.d.ts +1 -1
- package/locales/en-IE.mjs +2 -2
- package/locales/en-IL.d.ts +1 -1
- package/locales/en-IL.mjs +2 -2
- package/locales/en-IM.d.ts +1 -1
- package/locales/en-IM.mjs +2 -2
- package/locales/en-IN.d.ts +1 -1
- package/locales/en-IN.mjs +2 -2
- package/locales/en-IO.d.ts +1 -1
- package/locales/en-IO.mjs +2 -2
- package/locales/en-JE.d.ts +1 -1
- package/locales/en-JE.mjs +2 -2
- package/locales/en-JM.d.ts +1 -1
- package/locales/en-JM.mjs +2 -2
- package/locales/en-KE.d.ts +1 -1
- package/locales/en-KE.mjs +2 -2
- package/locales/en-KI.d.ts +1 -1
- package/locales/en-KI.mjs +2 -2
- package/locales/en-KN.d.ts +1 -1
- package/locales/en-KN.mjs +2 -2
- package/locales/en-KY.d.ts +1 -1
- package/locales/en-KY.mjs +2 -2
- package/locales/en-LC.d.ts +1 -1
- package/locales/en-LC.mjs +2 -2
- package/locales/en-LR.d.ts +1 -1
- package/locales/en-LR.mjs +2 -2
- package/locales/en-LS.d.ts +1 -1
- package/locales/en-LS.mjs +2 -2
- package/locales/en-MG.d.ts +1 -1
- package/locales/en-MG.mjs +2 -2
- package/locales/en-MH.d.ts +1 -1
- package/locales/en-MH.mjs +2 -2
- package/locales/en-MO.d.ts +1 -1
- package/locales/en-MO.mjs +2 -2
- package/locales/en-MP.d.ts +1 -1
- package/locales/en-MP.mjs +2 -2
- package/locales/en-MS.d.ts +1 -1
- package/locales/en-MS.mjs +2 -2
- package/locales/en-MT.d.ts +1 -1
- package/locales/en-MT.mjs +2 -2
- package/locales/en-MU.d.ts +1 -1
- package/locales/en-MU.mjs +2 -2
- package/locales/en-MV.d.ts +1 -1
- package/locales/en-MV.mjs +2 -2
- package/locales/en-MW.d.ts +1 -1
- package/locales/en-MW.mjs +2 -2
- package/locales/en-MY.d.ts +1 -1
- package/locales/en-MY.mjs +2 -2
- package/locales/en-NA.d.ts +1 -1
- package/locales/en-NA.mjs +2 -2
- package/locales/en-NF.d.ts +1 -1
- package/locales/en-NF.mjs +2 -2
- package/locales/en-NG.d.ts +1 -1
- package/locales/en-NG.mjs +2 -2
- package/locales/en-NL.d.ts +1 -1
- package/locales/en-NL.mjs +2 -2
- package/locales/en-NR.d.ts +1 -1
- package/locales/en-NR.mjs +2 -2
- package/locales/en-NU.d.ts +1 -1
- package/locales/en-NU.mjs +2 -2
- package/locales/en-NZ.d.ts +1 -1
- package/locales/en-NZ.mjs +2 -2
- package/locales/en-PG.d.ts +1 -1
- package/locales/en-PG.mjs +2 -2
- package/locales/en-PH.d.ts +1 -1
- package/locales/en-PH.mjs +2 -2
- package/locales/en-PK.d.ts +1 -1
- package/locales/en-PK.mjs +2 -2
- package/locales/en-PN.d.ts +1 -1
- package/locales/en-PN.mjs +2 -2
- package/locales/en-PR.d.ts +1 -1
- package/locales/en-PR.mjs +2 -2
- package/locales/en-PW.d.ts +1 -1
- package/locales/en-PW.mjs +2 -2
- package/locales/en-RW.d.ts +1 -1
- package/locales/en-RW.mjs +2 -2
- package/locales/en-SB.d.ts +1 -1
- package/locales/en-SB.mjs +2 -2
- package/locales/en-SC.d.ts +1 -1
- package/locales/en-SC.mjs +2 -2
- package/locales/en-SD.d.ts +1 -1
- package/locales/en-SD.mjs +2 -2
- package/locales/en-SE.d.ts +1 -1
- package/locales/en-SE.mjs +2 -2
- package/locales/en-SG.d.ts +1 -1
- package/locales/en-SG.mjs +2 -2
- package/locales/en-SH.d.ts +1 -1
- package/locales/en-SH.mjs +2 -2
- package/locales/en-SI.d.ts +1 -1
- package/locales/en-SI.mjs +2 -2
- package/locales/en-SL.d.ts +1 -1
- package/locales/en-SL.mjs +2 -2
- package/locales/en-SS.d.ts +1 -1
- package/locales/en-SS.mjs +2 -2
- package/locales/en-SX.d.ts +1 -1
- package/locales/en-SX.mjs +2 -2
- package/locales/en-SZ.d.ts +1 -1
- package/locales/en-SZ.mjs +2 -2
- package/locales/en-TC.d.ts +1 -1
- package/locales/en-TC.mjs +2 -2
- package/locales/en-TK.d.ts +1 -1
- package/locales/en-TK.mjs +2 -2
- package/locales/en-TO.d.ts +1 -1
- package/locales/en-TO.mjs +2 -2
- package/locales/en-TT.d.ts +1 -1
- package/locales/en-TT.mjs +2 -2
- package/locales/en-TV.d.ts +1 -1
- package/locales/en-TV.mjs +2 -2
- package/locales/en-TZ.d.ts +1 -1
- package/locales/en-TZ.mjs +2 -2
- package/locales/en-UG.d.ts +1 -1
- package/locales/en-UG.mjs +2 -2
- package/locales/en-UM.d.ts +1 -1
- package/locales/en-UM.mjs +2 -2
- package/locales/en-VC.d.ts +1 -1
- package/locales/en-VC.mjs +2 -2
- package/locales/en-VG.d.ts +1 -1
- package/locales/en-VG.mjs +2 -2
- package/locales/en-VI.d.ts +1 -1
- package/locales/en-VI.mjs +2 -2
- package/locales/en-VU.d.ts +1 -1
- package/locales/en-VU.mjs +2 -2
- package/locales/en-WS.d.ts +1 -1
- package/locales/en-WS.mjs +2 -2
- package/locales/en-ZA.d.ts +1 -1
- package/locales/en-ZA.mjs +2 -2
- package/locales/en-ZM.d.ts +1 -1
- package/locales/en-ZM.mjs +2 -2
- package/locales/en-ZW.d.ts +1 -1
- package/locales/en-ZW.mjs +2 -2
- package/locales/en.d.ts +1 -1
- package/locales/en.mjs +2 -2
- package/locales/eo.d.ts +1 -1
- package/locales/eo.mjs +2 -2
- package/locales/es-419.d.ts +1 -1
- package/locales/es-419.mjs +2 -2
- package/locales/es-AR.d.ts +1 -1
- package/locales/es-AR.mjs +2 -2
- package/locales/es-BO.d.ts +1 -1
- package/locales/es-BO.mjs +2 -2
- package/locales/es-BR.d.ts +1 -1
- package/locales/es-BR.mjs +2 -2
- package/locales/es-BZ.d.ts +1 -1
- package/locales/es-BZ.mjs +2 -2
- package/locales/es-CL.d.ts +1 -1
- package/locales/es-CL.mjs +2 -2
- package/locales/es-CO.d.ts +1 -1
- package/locales/es-CO.mjs +2 -2
- package/locales/es-CR.d.ts +1 -1
- package/locales/es-CR.mjs +2 -2
- package/locales/es-CU.d.ts +1 -1
- package/locales/es-CU.mjs +2 -2
- package/locales/es-DO.d.ts +1 -1
- package/locales/es-DO.mjs +2 -2
- package/locales/es-EA.d.ts +1 -1
- package/locales/es-EA.mjs +2 -2
- package/locales/es-EC.d.ts +1 -1
- package/locales/es-EC.mjs +2 -2
- package/locales/es-GQ.d.ts +1 -1
- package/locales/es-GQ.mjs +2 -2
- package/locales/es-GT.d.ts +1 -1
- package/locales/es-GT.mjs +2 -2
- package/locales/es-HN.d.ts +1 -1
- package/locales/es-HN.mjs +2 -2
- package/locales/es-IC.d.ts +1 -1
- package/locales/es-IC.mjs +2 -2
- package/locales/es-MX.d.ts +1 -1
- package/locales/es-MX.mjs +2 -2
- package/locales/es-NI.d.ts +1 -1
- package/locales/es-NI.mjs +2 -2
- package/locales/es-PA.d.ts +1 -1
- package/locales/es-PA.mjs +2 -2
- package/locales/es-PE.d.ts +1 -1
- package/locales/es-PE.mjs +2 -2
- package/locales/es-PH.d.ts +1 -1
- package/locales/es-PH.mjs +2 -2
- package/locales/es-PR.d.ts +1 -1
- package/locales/es-PR.mjs +2 -2
- package/locales/es-PY.d.ts +1 -1
- package/locales/es-PY.mjs +2 -2
- package/locales/es-SV.d.ts +1 -1
- package/locales/es-SV.mjs +2 -2
- package/locales/es-US.d.ts +1 -1
- package/locales/es-US.mjs +2 -2
- package/locales/es-UY.d.ts +1 -1
- package/locales/es-UY.mjs +2 -2
- package/locales/es-VE.d.ts +1 -1
- package/locales/es-VE.mjs +2 -2
- package/locales/es.d.ts +1 -1
- package/locales/es.mjs +2 -2
- package/locales/et.d.ts +1 -1
- package/locales/et.mjs +2 -2
- package/locales/eu.d.ts +1 -1
- package/locales/eu.mjs +2 -2
- package/locales/ewo.d.ts +1 -1
- package/locales/ewo.mjs +2 -2
- package/locales/extra/af-NA.d.ts +1 -1
- package/locales/extra/af-NA.mjs +2 -2
- package/locales/extra/af.d.ts +1 -1
- package/locales/extra/af.mjs +2 -2
- package/locales/extra/agq.d.ts +1 -1
- package/locales/extra/agq.mjs +2 -2
- package/locales/extra/ak.d.ts +1 -1
- package/locales/extra/ak.mjs +2 -2
- package/locales/extra/am.d.ts +1 -1
- package/locales/extra/am.mjs +2 -2
- package/locales/extra/ar-AE.d.ts +1 -1
- package/locales/extra/ar-AE.mjs +2 -2
- package/locales/extra/ar-BH.d.ts +1 -1
- package/locales/extra/ar-BH.mjs +2 -2
- package/locales/extra/ar-DJ.d.ts +1 -1
- package/locales/extra/ar-DJ.mjs +2 -2
- package/locales/extra/ar-DZ.d.ts +1 -1
- package/locales/extra/ar-DZ.mjs +2 -2
- package/locales/extra/ar-EG.d.ts +1 -1
- package/locales/extra/ar-EG.mjs +2 -2
- package/locales/extra/ar-EH.d.ts +1 -1
- package/locales/extra/ar-EH.mjs +2 -2
- package/locales/extra/ar-ER.d.ts +1 -1
- package/locales/extra/ar-ER.mjs +2 -2
- package/locales/extra/ar-IL.d.ts +1 -1
- package/locales/extra/ar-IL.mjs +2 -2
- package/locales/extra/ar-IQ.d.ts +1 -1
- package/locales/extra/ar-IQ.mjs +2 -2
- package/locales/extra/ar-JO.d.ts +1 -1
- package/locales/extra/ar-JO.mjs +2 -2
- package/locales/extra/ar-KM.d.ts +1 -1
- package/locales/extra/ar-KM.mjs +2 -2
- package/locales/extra/ar-KW.d.ts +1 -1
- package/locales/extra/ar-KW.mjs +2 -2
- package/locales/extra/ar-LB.d.ts +1 -1
- package/locales/extra/ar-LB.mjs +2 -2
- package/locales/extra/ar-LY.d.ts +1 -1
- package/locales/extra/ar-LY.mjs +2 -2
- package/locales/extra/ar-MA.d.ts +1 -1
- package/locales/extra/ar-MA.mjs +2 -2
- package/locales/extra/ar-MR.d.ts +1 -1
- package/locales/extra/ar-MR.mjs +2 -2
- package/locales/extra/ar-OM.d.ts +1 -1
- package/locales/extra/ar-OM.mjs +2 -2
- package/locales/extra/ar-PS.d.ts +1 -1
- package/locales/extra/ar-PS.mjs +2 -2
- package/locales/extra/ar-QA.d.ts +1 -1
- package/locales/extra/ar-QA.mjs +2 -2
- package/locales/extra/ar-SA.d.ts +1 -1
- package/locales/extra/ar-SA.mjs +2 -2
- package/locales/extra/ar-SD.d.ts +1 -1
- package/locales/extra/ar-SD.mjs +2 -2
- package/locales/extra/ar-SO.d.ts +1 -1
- package/locales/extra/ar-SO.mjs +2 -2
- package/locales/extra/ar-SS.d.ts +1 -1
- package/locales/extra/ar-SS.mjs +2 -2
- package/locales/extra/ar-SY.d.ts +1 -1
- package/locales/extra/ar-SY.mjs +2 -2
- package/locales/extra/ar-TD.d.ts +1 -1
- package/locales/extra/ar-TD.mjs +2 -2
- package/locales/extra/ar-TN.d.ts +1 -1
- package/locales/extra/ar-TN.mjs +2 -2
- package/locales/extra/ar-YE.d.ts +1 -1
- package/locales/extra/ar-YE.mjs +2 -2
- package/locales/extra/ar.d.ts +1 -1
- package/locales/extra/ar.mjs +2 -2
- package/locales/extra/as.d.ts +1 -1
- package/locales/extra/as.mjs +2 -2
- package/locales/extra/asa.d.ts +1 -1
- package/locales/extra/asa.mjs +2 -2
- package/locales/extra/ast.d.ts +1 -1
- package/locales/extra/ast.mjs +2 -2
- package/locales/extra/az-Cyrl.d.ts +1 -1
- package/locales/extra/az-Cyrl.mjs +2 -2
- package/locales/extra/az-Latn.d.ts +1 -1
- package/locales/extra/az-Latn.mjs +2 -2
- package/locales/extra/az.d.ts +1 -1
- package/locales/extra/az.mjs +2 -2
- package/locales/extra/bas.d.ts +1 -1
- package/locales/extra/bas.mjs +2 -2
- package/locales/extra/be-tarask.d.ts +1 -1
- package/locales/extra/be-tarask.mjs +2 -2
- package/locales/extra/be.d.ts +1 -1
- package/locales/extra/be.mjs +2 -2
- package/locales/extra/bem.d.ts +1 -1
- package/locales/extra/bem.mjs +2 -2
- package/locales/extra/bez.d.ts +1 -1
- package/locales/extra/bez.mjs +2 -2
- package/locales/extra/bg.d.ts +1 -1
- package/locales/extra/bg.mjs +2 -2
- package/locales/extra/bm.d.ts +1 -1
- package/locales/extra/bm.mjs +2 -2
- package/locales/extra/bn-IN.d.ts +1 -1
- package/locales/extra/bn-IN.mjs +2 -2
- package/locales/extra/bn.d.ts +1 -1
- package/locales/extra/bn.mjs +2 -2
- package/locales/extra/bo-IN.d.ts +1 -1
- package/locales/extra/bo-IN.mjs +2 -2
- package/locales/extra/bo.d.ts +1 -1
- package/locales/extra/bo.mjs +2 -2
- package/locales/extra/br.d.ts +1 -1
- package/locales/extra/br.mjs +2 -2
- package/locales/extra/brx.d.ts +1 -1
- package/locales/extra/brx.mjs +2 -2
- package/locales/extra/bs-Cyrl.d.ts +1 -1
- package/locales/extra/bs-Cyrl.mjs +2 -2
- package/locales/extra/bs-Latn.d.ts +1 -1
- package/locales/extra/bs-Latn.mjs +2 -2
- package/locales/extra/bs.d.ts +1 -1
- package/locales/extra/bs.mjs +2 -2
- package/locales/extra/ca-AD.d.ts +1 -1
- package/locales/extra/ca-AD.mjs +2 -2
- package/locales/extra/ca-ES-valencia.d.ts +1 -1
- package/locales/extra/ca-ES-valencia.mjs +2 -2
- package/locales/extra/ca-FR.d.ts +1 -1
- package/locales/extra/ca-FR.mjs +2 -2
- package/locales/extra/ca-IT.d.ts +1 -1
- package/locales/extra/ca-IT.mjs +2 -2
- package/locales/extra/ca.d.ts +1 -1
- package/locales/extra/ca.mjs +2 -2
- package/locales/extra/ccp-IN.d.ts +1 -1
- package/locales/extra/ccp-IN.mjs +2 -2
- package/locales/extra/ccp.d.ts +1 -1
- package/locales/extra/ccp.mjs +2 -2
- package/locales/extra/ce.d.ts +1 -1
- package/locales/extra/ce.mjs +2 -2
- package/locales/extra/ceb.d.ts +1 -1
- package/locales/extra/ceb.mjs +2 -2
- package/locales/extra/cgg.d.ts +1 -1
- package/locales/extra/cgg.mjs +2 -2
- package/locales/extra/chr.d.ts +1 -1
- package/locales/extra/chr.mjs +2 -2
- package/locales/extra/ckb-IR.d.ts +1 -1
- package/locales/extra/ckb-IR.mjs +2 -2
- package/locales/extra/ckb.d.ts +1 -1
- package/locales/extra/ckb.mjs +2 -2
- package/locales/extra/cs.d.ts +1 -1
- package/locales/extra/cs.mjs +2 -2
- package/locales/extra/cy.d.ts +1 -1
- package/locales/extra/cy.mjs +2 -2
- package/locales/extra/da-GL.d.ts +1 -1
- package/locales/extra/da-GL.mjs +2 -2
- package/locales/extra/da.d.ts +1 -1
- package/locales/extra/da.mjs +2 -2
- package/locales/extra/dav.d.ts +1 -1
- package/locales/extra/dav.mjs +2 -2
- package/locales/extra/de-AT.d.ts +1 -1
- package/locales/extra/de-AT.mjs +2 -2
- package/locales/extra/de-BE.d.ts +1 -1
- package/locales/extra/de-BE.mjs +2 -2
- package/locales/extra/de-CH.d.ts +1 -1
- package/locales/extra/de-CH.mjs +2 -2
- package/locales/extra/de-IT.d.ts +1 -1
- package/locales/extra/de-IT.mjs +2 -2
- package/locales/extra/de-LI.d.ts +1 -1
- package/locales/extra/de-LI.mjs +2 -2
- package/locales/extra/de-LU.d.ts +1 -1
- package/locales/extra/de-LU.mjs +2 -2
- package/locales/extra/de.d.ts +1 -1
- package/locales/extra/de.mjs +2 -2
- package/locales/extra/dje.d.ts +1 -1
- package/locales/extra/dje.mjs +2 -2
- package/locales/extra/doi.d.ts +1 -1
- package/locales/extra/doi.mjs +2 -2
- package/locales/extra/dsb.d.ts +1 -1
- package/locales/extra/dsb.mjs +2 -2
- package/locales/extra/dua.d.ts +1 -1
- package/locales/extra/dua.mjs +2 -2
- package/locales/extra/dyo.d.ts +1 -1
- package/locales/extra/dyo.mjs +2 -2
- package/locales/extra/dz.d.ts +1 -1
- package/locales/extra/dz.mjs +2 -2
- package/locales/extra/ebu.d.ts +1 -1
- package/locales/extra/ebu.mjs +2 -2
- package/locales/extra/ee-TG.d.ts +1 -1
- package/locales/extra/ee-TG.mjs +2 -2
- package/locales/extra/ee.d.ts +1 -1
- package/locales/extra/ee.mjs +2 -2
- package/locales/extra/el-CY.d.ts +1 -1
- package/locales/extra/el-CY.mjs +2 -2
- package/locales/extra/el.d.ts +1 -1
- package/locales/extra/el.mjs +2 -2
- package/locales/extra/en-001.d.ts +1 -1
- package/locales/extra/en-001.mjs +2 -2
- package/locales/extra/en-150.d.ts +1 -1
- package/locales/extra/en-150.mjs +2 -2
- package/locales/extra/en-AE.d.ts +1 -1
- package/locales/extra/en-AE.mjs +2 -2
- package/locales/extra/en-AG.d.ts +1 -1
- package/locales/extra/en-AG.mjs +2 -2
- package/locales/extra/en-AI.d.ts +1 -1
- package/locales/extra/en-AI.mjs +2 -2
- package/locales/extra/en-AS.d.ts +1 -1
- package/locales/extra/en-AS.mjs +2 -2
- package/locales/extra/en-AT.d.ts +1 -1
- package/locales/extra/en-AT.mjs +2 -2
- package/locales/extra/en-AU.d.ts +1 -1
- package/locales/extra/en-AU.mjs +2 -2
- package/locales/extra/en-BB.d.ts +1 -1
- package/locales/extra/en-BB.mjs +2 -2
- package/locales/extra/en-BE.d.ts +1 -1
- package/locales/extra/en-BE.mjs +2 -2
- package/locales/extra/en-BI.d.ts +1 -1
- package/locales/extra/en-BI.mjs +2 -2
- package/locales/extra/en-BM.d.ts +1 -1
- package/locales/extra/en-BM.mjs +2 -2
- package/locales/extra/en-BS.d.ts +1 -1
- package/locales/extra/en-BS.mjs +2 -2
- package/locales/extra/en-BW.d.ts +1 -1
- package/locales/extra/en-BW.mjs +2 -2
- package/locales/extra/en-BZ.d.ts +1 -1
- package/locales/extra/en-BZ.mjs +2 -2
- package/locales/extra/en-CA.d.ts +1 -1
- package/locales/extra/en-CA.mjs +2 -2
- package/locales/extra/en-CC.d.ts +1 -1
- package/locales/extra/en-CC.mjs +2 -2
- package/locales/extra/en-CH.d.ts +1 -1
- package/locales/extra/en-CH.mjs +2 -2
- package/locales/extra/en-CK.d.ts +1 -1
- package/locales/extra/en-CK.mjs +2 -2
- package/locales/extra/en-CM.d.ts +1 -1
- package/locales/extra/en-CM.mjs +2 -2
- package/locales/extra/en-CX.d.ts +1 -1
- package/locales/extra/en-CX.mjs +2 -2
- package/locales/extra/en-CY.d.ts +1 -1
- package/locales/extra/en-CY.mjs +2 -2
- package/locales/extra/en-DE.d.ts +1 -1
- package/locales/extra/en-DE.mjs +2 -2
- package/locales/extra/en-DG.d.ts +1 -1
- package/locales/extra/en-DG.mjs +2 -2
- package/locales/extra/en-DK.d.ts +1 -1
- package/locales/extra/en-DK.mjs +2 -2
- package/locales/extra/en-DM.d.ts +1 -1
- package/locales/extra/en-DM.mjs +2 -2
- package/locales/extra/en-ER.d.ts +1 -1
- package/locales/extra/en-ER.mjs +2 -2
- package/locales/extra/en-FI.d.ts +1 -1
- package/locales/extra/en-FI.mjs +2 -2
- package/locales/extra/en-FJ.d.ts +1 -1
- package/locales/extra/en-FJ.mjs +2 -2
- package/locales/extra/en-FK.d.ts +1 -1
- package/locales/extra/en-FK.mjs +2 -2
- package/locales/extra/en-FM.d.ts +1 -1
- package/locales/extra/en-FM.mjs +2 -2
- package/locales/extra/en-GB.d.ts +1 -1
- package/locales/extra/en-GB.mjs +2 -2
- package/locales/extra/en-GD.d.ts +1 -1
- package/locales/extra/en-GD.mjs +2 -2
- package/locales/extra/en-GG.d.ts +1 -1
- package/locales/extra/en-GG.mjs +2 -2
- package/locales/extra/en-GH.d.ts +1 -1
- package/locales/extra/en-GH.mjs +2 -2
- package/locales/extra/en-GI.d.ts +1 -1
- package/locales/extra/en-GI.mjs +2 -2
- package/locales/extra/en-GM.d.ts +1 -1
- package/locales/extra/en-GM.mjs +2 -2
- package/locales/extra/en-GU.d.ts +1 -1
- package/locales/extra/en-GU.mjs +2 -2
- package/locales/extra/en-GY.d.ts +1 -1
- package/locales/extra/en-GY.mjs +2 -2
- package/locales/extra/en-HK.d.ts +1 -1
- package/locales/extra/en-HK.mjs +2 -2
- package/locales/extra/en-IE.d.ts +1 -1
- package/locales/extra/en-IE.mjs +2 -2
- package/locales/extra/en-IL.d.ts +1 -1
- package/locales/extra/en-IL.mjs +2 -2
- package/locales/extra/en-IM.d.ts +1 -1
- package/locales/extra/en-IM.mjs +2 -2
- package/locales/extra/en-IN.d.ts +1 -1
- package/locales/extra/en-IN.mjs +2 -2
- package/locales/extra/en-IO.d.ts +1 -1
- package/locales/extra/en-IO.mjs +2 -2
- package/locales/extra/en-JE.d.ts +1 -1
- package/locales/extra/en-JE.mjs +2 -2
- package/locales/extra/en-JM.d.ts +1 -1
- package/locales/extra/en-JM.mjs +2 -2
- package/locales/extra/en-KE.d.ts +1 -1
- package/locales/extra/en-KE.mjs +2 -2
- package/locales/extra/en-KI.d.ts +1 -1
- package/locales/extra/en-KI.mjs +2 -2
- package/locales/extra/en-KN.d.ts +1 -1
- package/locales/extra/en-KN.mjs +2 -2
- package/locales/extra/en-KY.d.ts +1 -1
- package/locales/extra/en-KY.mjs +2 -2
- package/locales/extra/en-LC.d.ts +1 -1
- package/locales/extra/en-LC.mjs +2 -2
- package/locales/extra/en-LR.d.ts +1 -1
- package/locales/extra/en-LR.mjs +2 -2
- package/locales/extra/en-LS.d.ts +1 -1
- package/locales/extra/en-LS.mjs +2 -2
- package/locales/extra/en-MG.d.ts +1 -1
- package/locales/extra/en-MG.mjs +2 -2
- package/locales/extra/en-MH.d.ts +1 -1
- package/locales/extra/en-MH.mjs +2 -2
- package/locales/extra/en-MO.d.ts +1 -1
- package/locales/extra/en-MO.mjs +2 -2
- package/locales/extra/en-MP.d.ts +1 -1
- package/locales/extra/en-MP.mjs +2 -2
- package/locales/extra/en-MS.d.ts +1 -1
- package/locales/extra/en-MS.mjs +2 -2
- package/locales/extra/en-MT.d.ts +1 -1
- package/locales/extra/en-MT.mjs +2 -2
- package/locales/extra/en-MU.d.ts +1 -1
- package/locales/extra/en-MU.mjs +2 -2
- package/locales/extra/en-MV.d.ts +1 -1
- package/locales/extra/en-MV.mjs +2 -2
- package/locales/extra/en-MW.d.ts +1 -1
- package/locales/extra/en-MW.mjs +2 -2
- package/locales/extra/en-MY.d.ts +1 -1
- package/locales/extra/en-MY.mjs +2 -2
- package/locales/extra/en-NA.d.ts +1 -1
- package/locales/extra/en-NA.mjs +2 -2
- package/locales/extra/en-NF.d.ts +1 -1
- package/locales/extra/en-NF.mjs +2 -2
- package/locales/extra/en-NG.d.ts +1 -1
- package/locales/extra/en-NG.mjs +2 -2
- package/locales/extra/en-NL.d.ts +1 -1
- package/locales/extra/en-NL.mjs +2 -2
- package/locales/extra/en-NR.d.ts +1 -1
- package/locales/extra/en-NR.mjs +2 -2
- package/locales/extra/en-NU.d.ts +1 -1
- package/locales/extra/en-NU.mjs +2 -2
- package/locales/extra/en-NZ.d.ts +1 -1
- package/locales/extra/en-NZ.mjs +2 -2
- package/locales/extra/en-PG.d.ts +1 -1
- package/locales/extra/en-PG.mjs +2 -2
- package/locales/extra/en-PH.d.ts +1 -1
- package/locales/extra/en-PH.mjs +2 -2
- package/locales/extra/en-PK.d.ts +1 -1
- package/locales/extra/en-PK.mjs +2 -2
- package/locales/extra/en-PN.d.ts +1 -1
- package/locales/extra/en-PN.mjs +2 -2
- package/locales/extra/en-PR.d.ts +1 -1
- package/locales/extra/en-PR.mjs +2 -2
- package/locales/extra/en-PW.d.ts +1 -1
- package/locales/extra/en-PW.mjs +2 -2
- package/locales/extra/en-RW.d.ts +1 -1
- package/locales/extra/en-RW.mjs +2 -2
- package/locales/extra/en-SB.d.ts +1 -1
- package/locales/extra/en-SB.mjs +2 -2
- package/locales/extra/en-SC.d.ts +1 -1
- package/locales/extra/en-SC.mjs +2 -2
- package/locales/extra/en-SD.d.ts +1 -1
- package/locales/extra/en-SD.mjs +2 -2
- package/locales/extra/en-SE.d.ts +1 -1
- package/locales/extra/en-SE.mjs +2 -2
- package/locales/extra/en-SG.d.ts +1 -1
- package/locales/extra/en-SG.mjs +2 -2
- package/locales/extra/en-SH.d.ts +1 -1
- package/locales/extra/en-SH.mjs +2 -2
- package/locales/extra/en-SI.d.ts +1 -1
- package/locales/extra/en-SI.mjs +2 -2
- package/locales/extra/en-SL.d.ts +1 -1
- package/locales/extra/en-SL.mjs +2 -2
- package/locales/extra/en-SS.d.ts +1 -1
- package/locales/extra/en-SS.mjs +2 -2
- package/locales/extra/en-SX.d.ts +1 -1
- package/locales/extra/en-SX.mjs +2 -2
- package/locales/extra/en-SZ.d.ts +1 -1
- package/locales/extra/en-SZ.mjs +2 -2
- package/locales/extra/en-TC.d.ts +1 -1
- package/locales/extra/en-TC.mjs +2 -2
- package/locales/extra/en-TK.d.ts +1 -1
- package/locales/extra/en-TK.mjs +2 -2
- package/locales/extra/en-TO.d.ts +1 -1
- package/locales/extra/en-TO.mjs +2 -2
- package/locales/extra/en-TT.d.ts +1 -1
- package/locales/extra/en-TT.mjs +2 -2
- package/locales/extra/en-TV.d.ts +1 -1
- package/locales/extra/en-TV.mjs +2 -2
- package/locales/extra/en-TZ.d.ts +1 -1
- package/locales/extra/en-TZ.mjs +2 -2
- package/locales/extra/en-UG.d.ts +1 -1
- package/locales/extra/en-UG.mjs +2 -2
- package/locales/extra/en-UM.d.ts +1 -1
- package/locales/extra/en-UM.mjs +2 -2
- package/locales/extra/en-VC.d.ts +1 -1
- package/locales/extra/en-VC.mjs +2 -2
- package/locales/extra/en-VG.d.ts +1 -1
- package/locales/extra/en-VG.mjs +2 -2
- package/locales/extra/en-VI.d.ts +1 -1
- package/locales/extra/en-VI.mjs +2 -2
- package/locales/extra/en-VU.d.ts +1 -1
- package/locales/extra/en-VU.mjs +2 -2
- package/locales/extra/en-WS.d.ts +1 -1
- package/locales/extra/en-WS.mjs +2 -2
- package/locales/extra/en-ZA.d.ts +1 -1
- package/locales/extra/en-ZA.mjs +2 -2
- package/locales/extra/en-ZM.d.ts +1 -1
- package/locales/extra/en-ZM.mjs +2 -2
- package/locales/extra/en-ZW.d.ts +1 -1
- package/locales/extra/en-ZW.mjs +2 -2
- package/locales/extra/en.d.ts +1 -1
- package/locales/extra/en.mjs +2 -2
- package/locales/extra/eo.d.ts +1 -1
- package/locales/extra/eo.mjs +2 -2
- package/locales/extra/es-419.d.ts +1 -1
- package/locales/extra/es-419.mjs +2 -2
- package/locales/extra/es-AR.d.ts +1 -1
- package/locales/extra/es-AR.mjs +2 -2
- package/locales/extra/es-BO.d.ts +1 -1
- package/locales/extra/es-BO.mjs +2 -2
- package/locales/extra/es-BR.d.ts +1 -1
- package/locales/extra/es-BR.mjs +2 -2
- package/locales/extra/es-BZ.d.ts +1 -1
- package/locales/extra/es-BZ.mjs +2 -2
- package/locales/extra/es-CL.d.ts +1 -1
- package/locales/extra/es-CL.mjs +2 -2
- package/locales/extra/es-CO.d.ts +1 -1
- package/locales/extra/es-CO.mjs +2 -2
- package/locales/extra/es-CR.d.ts +1 -1
- package/locales/extra/es-CR.mjs +2 -2
- package/locales/extra/es-CU.d.ts +1 -1
- package/locales/extra/es-CU.mjs +2 -2
- package/locales/extra/es-DO.d.ts +1 -1
- package/locales/extra/es-DO.mjs +2 -2
- package/locales/extra/es-EA.d.ts +1 -1
- package/locales/extra/es-EA.mjs +2 -2
- package/locales/extra/es-EC.d.ts +1 -1
- package/locales/extra/es-EC.mjs +2 -2
- package/locales/extra/es-GQ.d.ts +1 -1
- package/locales/extra/es-GQ.mjs +2 -2
- package/locales/extra/es-GT.d.ts +1 -1
- package/locales/extra/es-GT.mjs +2 -2
- package/locales/extra/es-HN.d.ts +1 -1
- package/locales/extra/es-HN.mjs +2 -2
- package/locales/extra/es-IC.d.ts +1 -1
- package/locales/extra/es-IC.mjs +2 -2
- package/locales/extra/es-MX.d.ts +1 -1
- package/locales/extra/es-MX.mjs +2 -2
- package/locales/extra/es-NI.d.ts +1 -1
- package/locales/extra/es-NI.mjs +2 -2
- package/locales/extra/es-PA.d.ts +1 -1
- package/locales/extra/es-PA.mjs +2 -2
- package/locales/extra/es-PE.d.ts +1 -1
- package/locales/extra/es-PE.mjs +2 -2
- package/locales/extra/es-PH.d.ts +1 -1
- package/locales/extra/es-PH.mjs +2 -2
- package/locales/extra/es-PR.d.ts +1 -1
- package/locales/extra/es-PR.mjs +2 -2
- package/locales/extra/es-PY.d.ts +1 -1
- package/locales/extra/es-PY.mjs +2 -2
- package/locales/extra/es-SV.d.ts +1 -1
- package/locales/extra/es-SV.mjs +2 -2
- package/locales/extra/es-US.d.ts +1 -1
- package/locales/extra/es-US.mjs +2 -2
- package/locales/extra/es-UY.d.ts +1 -1
- package/locales/extra/es-UY.mjs +2 -2
- package/locales/extra/es-VE.d.ts +1 -1
- package/locales/extra/es-VE.mjs +2 -2
- package/locales/extra/es.d.ts +1 -1
- package/locales/extra/es.mjs +2 -2
- package/locales/extra/et.d.ts +1 -1
- package/locales/extra/et.mjs +2 -2
- package/locales/extra/eu.d.ts +1 -1
- package/locales/extra/eu.mjs +2 -2
- package/locales/extra/ewo.d.ts +1 -1
- package/locales/extra/ewo.mjs +2 -2
- package/locales/extra/fa-AF.d.ts +1 -1
- package/locales/extra/fa-AF.mjs +2 -2
- package/locales/extra/fa.d.ts +1 -1
- package/locales/extra/fa.mjs +2 -2
- package/locales/extra/ff-Adlm-BF.d.ts +1 -1
- package/locales/extra/ff-Adlm-BF.mjs +2 -2
- package/locales/extra/ff-Adlm-CM.d.ts +1 -1
- package/locales/extra/ff-Adlm-CM.mjs +2 -2
- package/locales/extra/ff-Adlm-GH.d.ts +1 -1
- package/locales/extra/ff-Adlm-GH.mjs +2 -2
- package/locales/extra/ff-Adlm-GM.d.ts +1 -1
- package/locales/extra/ff-Adlm-GM.mjs +2 -2
- package/locales/extra/ff-Adlm-GW.d.ts +1 -1
- package/locales/extra/ff-Adlm-GW.mjs +2 -2
- package/locales/extra/ff-Adlm-LR.d.ts +1 -1
- package/locales/extra/ff-Adlm-LR.mjs +2 -2
- package/locales/extra/ff-Adlm-MR.d.ts +1 -1
- package/locales/extra/ff-Adlm-MR.mjs +2 -2
- package/locales/extra/ff-Adlm-NE.d.ts +1 -1
- package/locales/extra/ff-Adlm-NE.mjs +2 -2
- package/locales/extra/ff-Adlm-NG.d.ts +1 -1
- package/locales/extra/ff-Adlm-NG.mjs +2 -2
- package/locales/extra/ff-Adlm-SL.d.ts +1 -1
- package/locales/extra/ff-Adlm-SL.mjs +2 -2
- package/locales/extra/ff-Adlm-SN.d.ts +1 -1
- package/locales/extra/ff-Adlm-SN.mjs +2 -2
- package/locales/extra/ff-Adlm.d.ts +1 -1
- package/locales/extra/ff-Adlm.mjs +2 -2
- package/locales/extra/ff-CM.d.ts +1 -1
- package/locales/extra/ff-CM.mjs +2 -2
- package/locales/extra/ff-GN.d.ts +1 -1
- package/locales/extra/ff-GN.mjs +2 -2
- package/locales/extra/ff-Latn-BF.d.ts +1 -1
- package/locales/extra/ff-Latn-BF.mjs +2 -2
- package/locales/extra/ff-Latn-CM.d.ts +1 -1
- package/locales/extra/ff-Latn-CM.mjs +2 -2
- package/locales/extra/ff-Latn-GH.d.ts +1 -1
- package/locales/extra/ff-Latn-GH.mjs +2 -2
- package/locales/extra/ff-Latn-GM.d.ts +1 -1
- package/locales/extra/ff-Latn-GM.mjs +2 -2
- package/locales/extra/ff-Latn-GN.d.ts +1 -1
- package/locales/extra/ff-Latn-GN.mjs +2 -2
- package/locales/extra/ff-Latn-GW.d.ts +1 -1
- package/locales/extra/ff-Latn-GW.mjs +2 -2
- package/locales/extra/ff-Latn-LR.d.ts +1 -1
- package/locales/extra/ff-Latn-LR.mjs +2 -2
- package/locales/extra/ff-Latn-MR.d.ts +1 -1
- package/locales/extra/ff-Latn-MR.mjs +2 -2
- package/locales/extra/ff-Latn-NE.d.ts +1 -1
- package/locales/extra/ff-Latn-NE.mjs +2 -2
- package/locales/extra/ff-Latn-NG.d.ts +1 -1
- package/locales/extra/ff-Latn-NG.mjs +2 -2
- package/locales/extra/ff-Latn-SL.d.ts +1 -1
- package/locales/extra/ff-Latn-SL.mjs +2 -2
- package/locales/extra/ff-Latn.d.ts +1 -1
- package/locales/extra/ff-Latn.mjs +2 -2
- package/locales/extra/ff-MR.d.ts +1 -1
- package/locales/extra/ff-MR.mjs +2 -2
- package/locales/extra/ff.d.ts +1 -1
- package/locales/extra/ff.mjs +2 -2
- package/locales/extra/fi.d.ts +1 -1
- package/locales/extra/fi.mjs +2 -2
- package/locales/extra/fil.d.ts +1 -1
- package/locales/extra/fil.mjs +2 -2
- package/locales/extra/fo-DK.d.ts +1 -1
- package/locales/extra/fo-DK.mjs +2 -2
- package/locales/extra/fo.d.ts +1 -1
- package/locales/extra/fo.mjs +2 -2
- package/locales/extra/fr-BE.d.ts +1 -1
- package/locales/extra/fr-BE.mjs +2 -2
- package/locales/extra/fr-BF.d.ts +1 -1
- package/locales/extra/fr-BF.mjs +2 -2
- package/locales/extra/fr-BI.d.ts +1 -1
- package/locales/extra/fr-BI.mjs +2 -2
- package/locales/extra/fr-BJ.d.ts +1 -1
- package/locales/extra/fr-BJ.mjs +2 -2
- package/locales/extra/fr-BL.d.ts +1 -1
- package/locales/extra/fr-BL.mjs +2 -2
- package/locales/extra/fr-CA.d.ts +1 -1
- package/locales/extra/fr-CA.mjs +2 -2
- package/locales/extra/fr-CD.d.ts +1 -1
- package/locales/extra/fr-CD.mjs +2 -2
- package/locales/extra/fr-CF.d.ts +1 -1
- package/locales/extra/fr-CF.mjs +2 -2
- package/locales/extra/fr-CG.d.ts +1 -1
- package/locales/extra/fr-CG.mjs +2 -2
- package/locales/extra/fr-CH.d.ts +1 -1
- package/locales/extra/fr-CH.mjs +2 -2
- package/locales/extra/fr-CI.d.ts +1 -1
- package/locales/extra/fr-CI.mjs +2 -2
- package/locales/extra/fr-CM.d.ts +1 -1
- package/locales/extra/fr-CM.mjs +2 -2
- package/locales/extra/fr-DJ.d.ts +1 -1
- package/locales/extra/fr-DJ.mjs +2 -2
- package/locales/extra/fr-DZ.d.ts +1 -1
- package/locales/extra/fr-DZ.mjs +2 -2
- package/locales/extra/fr-GA.d.ts +1 -1
- package/locales/extra/fr-GA.mjs +2 -2
- package/locales/extra/fr-GF.d.ts +1 -1
- package/locales/extra/fr-GF.mjs +2 -2
- package/locales/extra/fr-GN.d.ts +1 -1
- package/locales/extra/fr-GN.mjs +2 -2
- package/locales/extra/fr-GP.d.ts +1 -1
- package/locales/extra/fr-GP.mjs +2 -2
- package/locales/extra/fr-GQ.d.ts +1 -1
- package/locales/extra/fr-GQ.mjs +2 -2
- package/locales/extra/fr-HT.d.ts +1 -1
- package/locales/extra/fr-HT.mjs +2 -2
- package/locales/extra/fr-KM.d.ts +1 -1
- package/locales/extra/fr-KM.mjs +2 -2
- package/locales/extra/fr-LU.d.ts +1 -1
- package/locales/extra/fr-LU.mjs +2 -2
- package/locales/extra/fr-MA.d.ts +1 -1
- package/locales/extra/fr-MA.mjs +2 -2
- package/locales/extra/fr-MC.d.ts +1 -1
- package/locales/extra/fr-MC.mjs +2 -2
- package/locales/extra/fr-MF.d.ts +1 -1
- package/locales/extra/fr-MF.mjs +2 -2
- package/locales/extra/fr-MG.d.ts +1 -1
- package/locales/extra/fr-MG.mjs +2 -2
- package/locales/extra/fr-ML.d.ts +1 -1
- package/locales/extra/fr-ML.mjs +2 -2
- package/locales/extra/fr-MQ.d.ts +1 -1
- package/locales/extra/fr-MQ.mjs +2 -2
- package/locales/extra/fr-MR.d.ts +1 -1
- package/locales/extra/fr-MR.mjs +2 -2
- package/locales/extra/fr-MU.d.ts +1 -1
- package/locales/extra/fr-MU.mjs +2 -2
- package/locales/extra/fr-NC.d.ts +1 -1
- package/locales/extra/fr-NC.mjs +2 -2
- package/locales/extra/fr-NE.d.ts +1 -1
- package/locales/extra/fr-NE.mjs +2 -2
- package/locales/extra/fr-PF.d.ts +1 -1
- package/locales/extra/fr-PF.mjs +2 -2
- package/locales/extra/fr-PM.d.ts +1 -1
- package/locales/extra/fr-PM.mjs +2 -2
- package/locales/extra/fr-RE.d.ts +1 -1
- package/locales/extra/fr-RE.mjs +2 -2
- package/locales/extra/fr-RW.d.ts +1 -1
- package/locales/extra/fr-RW.mjs +2 -2
- package/locales/extra/fr-SC.d.ts +1 -1
- package/locales/extra/fr-SC.mjs +2 -2
- package/locales/extra/fr-SN.d.ts +1 -1
- package/locales/extra/fr-SN.mjs +2 -2
- package/locales/extra/fr-SY.d.ts +1 -1
- package/locales/extra/fr-SY.mjs +2 -2
- package/locales/extra/fr-TD.d.ts +1 -1
- package/locales/extra/fr-TD.mjs +2 -2
- package/locales/extra/fr-TG.d.ts +1 -1
- package/locales/extra/fr-TG.mjs +2 -2
- package/locales/extra/fr-TN.d.ts +1 -1
- package/locales/extra/fr-TN.mjs +2 -2
- package/locales/extra/fr-VU.d.ts +1 -1
- package/locales/extra/fr-VU.mjs +2 -2
- package/locales/extra/fr-WF.d.ts +1 -1
- package/locales/extra/fr-WF.mjs +2 -2
- package/locales/extra/fr-YT.d.ts +1 -1
- package/locales/extra/fr-YT.mjs +2 -2
- package/locales/extra/fr.d.ts +1 -1
- package/locales/extra/fr.mjs +2 -2
- package/locales/extra/fur.d.ts +1 -1
- package/locales/extra/fur.mjs +2 -2
- package/locales/extra/fy.d.ts +1 -1
- package/locales/extra/fy.mjs +2 -2
- package/locales/extra/ga-GB.d.ts +1 -1
- package/locales/extra/ga-GB.mjs +2 -2
- package/locales/extra/ga.d.ts +1 -1
- package/locales/extra/ga.mjs +2 -2
- package/locales/extra/gd.d.ts +1 -1
- package/locales/extra/gd.mjs +2 -2
- package/locales/extra/gl.d.ts +1 -1
- package/locales/extra/gl.mjs +2 -2
- package/locales/extra/gsw-FR.d.ts +1 -1
- package/locales/extra/gsw-FR.mjs +2 -2
- package/locales/extra/gsw-LI.d.ts +1 -1
- package/locales/extra/gsw-LI.mjs +2 -2
- package/locales/extra/gsw.d.ts +1 -1
- package/locales/extra/gsw.mjs +2 -2
- package/locales/extra/gu.d.ts +1 -1
- package/locales/extra/gu.mjs +2 -2
- package/locales/extra/guz.d.ts +1 -1
- package/locales/extra/guz.mjs +2 -2
- package/locales/extra/gv.d.ts +1 -1
- package/locales/extra/gv.mjs +2 -2
- package/locales/extra/ha-GH.d.ts +1 -1
- package/locales/extra/ha-GH.mjs +2 -2
- package/locales/extra/ha-NE.d.ts +1 -1
- package/locales/extra/ha-NE.mjs +2 -2
- package/locales/extra/ha.d.ts +1 -1
- package/locales/extra/ha.mjs +2 -2
- package/locales/extra/haw.d.ts +1 -1
- package/locales/extra/haw.mjs +2 -2
- package/locales/extra/he.d.ts +1 -1
- package/locales/extra/he.mjs +2 -2
- package/locales/extra/hi-Latn.d.ts +1 -1
- package/locales/extra/hi-Latn.mjs +2 -2
- package/locales/extra/hi.d.ts +1 -1
- package/locales/extra/hi.mjs +2 -2
- package/locales/extra/hr-BA.d.ts +1 -1
- package/locales/extra/hr-BA.mjs +2 -2
- package/locales/extra/hr.d.ts +1 -1
- package/locales/extra/hr.mjs +2 -2
- package/locales/extra/hsb.d.ts +1 -1
- package/locales/extra/hsb.mjs +2 -2
- package/locales/extra/hu.d.ts +1 -1
- package/locales/extra/hu.mjs +2 -2
- package/locales/extra/hy.d.ts +1 -1
- package/locales/extra/hy.mjs +2 -2
- package/locales/extra/ia.d.ts +1 -1
- package/locales/extra/ia.mjs +2 -2
- package/locales/extra/id.d.ts +1 -1
- package/locales/extra/id.mjs +2 -2
- package/locales/extra/ig.d.ts +1 -1
- package/locales/extra/ig.mjs +2 -2
- package/locales/extra/ii.d.ts +1 -1
- package/locales/extra/ii.mjs +2 -2
- package/locales/extra/is.d.ts +1 -1
- package/locales/extra/is.mjs +2 -2
- package/locales/extra/it-CH.d.ts +1 -1
- package/locales/extra/it-CH.mjs +2 -2
- package/locales/extra/it-SM.d.ts +1 -1
- package/locales/extra/it-SM.mjs +2 -2
- package/locales/extra/it-VA.d.ts +1 -1
- package/locales/extra/it-VA.mjs +2 -2
- package/locales/extra/it.d.ts +1 -1
- package/locales/extra/it.mjs +2 -2
- package/locales/extra/ja.d.ts +1 -1
- package/locales/extra/ja.mjs +2 -2
- package/locales/extra/jgo.d.ts +1 -1
- package/locales/extra/jgo.mjs +2 -2
- package/locales/extra/jmc.d.ts +1 -1
- package/locales/extra/jmc.mjs +2 -2
- package/locales/extra/jv.d.ts +1 -1
- package/locales/extra/jv.mjs +2 -2
- package/locales/extra/ka.d.ts +1 -1
- package/locales/extra/ka.mjs +2 -2
- package/locales/extra/kab.d.ts +1 -1
- package/locales/extra/kab.mjs +2 -2
- package/locales/extra/kam.d.ts +1 -1
- package/locales/extra/kam.mjs +2 -2
- package/locales/extra/kde.d.ts +1 -1
- package/locales/extra/kde.mjs +2 -2
- package/locales/extra/kea.d.ts +1 -1
- package/locales/extra/kea.mjs +2 -2
- package/locales/extra/kgp.d.ts +1 -1
- package/locales/extra/kgp.mjs +2 -2
- package/locales/extra/khq.d.ts +1 -1
- package/locales/extra/khq.mjs +2 -2
- package/locales/extra/ki.d.ts +1 -1
- package/locales/extra/ki.mjs +2 -2
- package/locales/extra/kk.d.ts +1 -1
- package/locales/extra/kk.mjs +2 -2
- package/locales/extra/kkj.d.ts +1 -1
- package/locales/extra/kkj.mjs +2 -2
- package/locales/extra/kl.d.ts +1 -1
- package/locales/extra/kl.mjs +2 -2
- package/locales/extra/kln.d.ts +1 -1
- package/locales/extra/kln.mjs +2 -2
- package/locales/extra/km.d.ts +1 -1
- package/locales/extra/km.mjs +2 -2
- package/locales/extra/kn.d.ts +1 -1
- package/locales/extra/kn.mjs +2 -2
- package/locales/extra/ko-KP.d.ts +1 -1
- package/locales/extra/ko-KP.mjs +2 -2
- package/locales/extra/ko.d.ts +1 -1
- package/locales/extra/ko.mjs +2 -2
- package/locales/extra/kok.d.ts +1 -1
- package/locales/extra/kok.mjs +2 -2
- package/locales/extra/ks-Arab.d.ts +1 -1
- package/locales/extra/ks-Arab.mjs +2 -2
- package/locales/extra/ks-Deva.d.ts +1 -1
- package/locales/extra/ks-Deva.mjs +2 -2
- package/locales/extra/ks.d.ts +1 -1
- package/locales/extra/ks.mjs +2 -2
- package/locales/extra/ksb.d.ts +1 -1
- package/locales/extra/ksb.mjs +2 -2
- package/locales/extra/ksf.d.ts +1 -1
- package/locales/extra/ksf.mjs +2 -2
- package/locales/extra/ksh.d.ts +1 -1
- package/locales/extra/ksh.mjs +2 -2
- package/locales/extra/ku.d.ts +1 -1
- package/locales/extra/ku.mjs +2 -2
- package/locales/extra/kw.d.ts +1 -1
- package/locales/extra/kw.mjs +2 -2
- package/locales/extra/ky.d.ts +1 -1
- package/locales/extra/ky.mjs +2 -2
- package/locales/extra/lag.d.ts +1 -1
- package/locales/extra/lag.mjs +2 -2
- package/locales/extra/lb.d.ts +1 -1
- package/locales/extra/lb.mjs +2 -2
- package/locales/extra/lg.d.ts +1 -1
- package/locales/extra/lg.mjs +2 -2
- package/locales/extra/lkt.d.ts +1 -1
- package/locales/extra/lkt.mjs +2 -2
- package/locales/extra/ln-AO.d.ts +1 -1
- package/locales/extra/ln-AO.mjs +2 -2
- package/locales/extra/ln-CF.d.ts +1 -1
- package/locales/extra/ln-CF.mjs +2 -2
- package/locales/extra/ln-CG.d.ts +1 -1
- package/locales/extra/ln-CG.mjs +2 -2
- package/locales/extra/ln.d.ts +1 -1
- package/locales/extra/ln.mjs +2 -2
- package/locales/extra/lo.d.ts +1 -1
- package/locales/extra/lo.mjs +2 -2
- package/locales/extra/lrc-IQ.d.ts +1 -1
- package/locales/extra/lrc-IQ.mjs +2 -2
- package/locales/extra/lrc.d.ts +1 -1
- package/locales/extra/lrc.mjs +2 -2
- package/locales/extra/lt.d.ts +1 -1
- package/locales/extra/lt.mjs +2 -2
- package/locales/extra/lu.d.ts +1 -1
- package/locales/extra/lu.mjs +2 -2
- package/locales/extra/luo.d.ts +1 -1
- package/locales/extra/luo.mjs +2 -2
- package/locales/extra/luy.d.ts +1 -1
- package/locales/extra/luy.mjs +2 -2
- package/locales/extra/lv.d.ts +1 -1
- package/locales/extra/lv.mjs +2 -2
- package/locales/extra/mai.d.ts +1 -1
- package/locales/extra/mai.mjs +2 -2
- package/locales/extra/mas-TZ.d.ts +1 -1
- package/locales/extra/mas-TZ.mjs +2 -2
- package/locales/extra/mas.d.ts +1 -1
- package/locales/extra/mas.mjs +2 -2
- package/locales/extra/mer.d.ts +1 -1
- package/locales/extra/mer.mjs +2 -2
- package/locales/extra/mfe.d.ts +1 -1
- package/locales/extra/mfe.mjs +2 -2
- package/locales/extra/mg.d.ts +1 -1
- package/locales/extra/mg.mjs +2 -2
- package/locales/extra/mgh.d.ts +1 -1
- package/locales/extra/mgh.mjs +2 -2
- package/locales/extra/mgo.d.ts +1 -1
- package/locales/extra/mgo.mjs +2 -2
- package/locales/extra/mi.d.ts +1 -1
- package/locales/extra/mi.mjs +2 -2
- package/locales/extra/mk.d.ts +1 -1
- package/locales/extra/mk.mjs +2 -2
- package/locales/extra/ml.d.ts +1 -1
- package/locales/extra/ml.mjs +2 -2
- package/locales/extra/mn.d.ts +1 -1
- package/locales/extra/mn.mjs +2 -2
- package/locales/extra/mni-Beng.d.ts +1 -1
- package/locales/extra/mni-Beng.mjs +2 -2
- package/locales/extra/mni.d.ts +1 -1
- package/locales/extra/mni.mjs +2 -2
- package/locales/extra/mr.d.ts +1 -1
- package/locales/extra/mr.mjs +2 -2
- package/locales/extra/ms-BN.d.ts +1 -1
- package/locales/extra/ms-BN.mjs +2 -2
- package/locales/extra/ms-ID.d.ts +1 -1
- package/locales/extra/ms-ID.mjs +2 -2
- package/locales/extra/ms-SG.d.ts +1 -1
- package/locales/extra/ms-SG.mjs +2 -2
- package/locales/extra/ms.d.ts +1 -1
- package/locales/extra/ms.mjs +2 -2
- package/locales/extra/mt.d.ts +1 -1
- package/locales/extra/mt.mjs +2 -2
- package/locales/extra/mua.d.ts +1 -1
- package/locales/extra/mua.mjs +2 -2
- package/locales/extra/my.d.ts +1 -1
- package/locales/extra/my.mjs +2 -2
- package/locales/extra/mzn.d.ts +1 -1
- package/locales/extra/mzn.mjs +2 -2
- package/locales/extra/naq.d.ts +1 -1
- package/locales/extra/naq.mjs +2 -2
- package/locales/extra/nb-SJ.d.ts +1 -1
- package/locales/extra/nb-SJ.mjs +2 -2
- package/locales/extra/nb.d.ts +1 -1
- package/locales/extra/nb.mjs +2 -2
- package/locales/extra/nd.d.ts +1 -1
- package/locales/extra/nd.mjs +2 -2
- package/locales/extra/nds-NL.d.ts +1 -1
- package/locales/extra/nds-NL.mjs +2 -2
- package/locales/extra/nds.d.ts +1 -1
- package/locales/extra/nds.mjs +2 -2
- package/locales/extra/ne-IN.d.ts +1 -1
- package/locales/extra/ne-IN.mjs +2 -2
- package/locales/extra/ne.d.ts +1 -1
- package/locales/extra/ne.mjs +2 -2
- package/locales/extra/nl-AW.d.ts +1 -1
- package/locales/extra/nl-AW.mjs +2 -2
- package/locales/extra/nl-BE.d.ts +1 -1
- package/locales/extra/nl-BE.mjs +2 -2
- package/locales/extra/nl-BQ.d.ts +1 -1
- package/locales/extra/nl-BQ.mjs +2 -2
- package/locales/extra/nl-CW.d.ts +1 -1
- package/locales/extra/nl-CW.mjs +2 -2
- package/locales/extra/nl-SR.d.ts +1 -1
- package/locales/extra/nl-SR.mjs +2 -2
- package/locales/extra/nl-SX.d.ts +1 -1
- package/locales/extra/nl-SX.mjs +2 -2
- package/locales/extra/nl.d.ts +1 -1
- package/locales/extra/nl.mjs +2 -2
- package/locales/extra/nmg.d.ts +1 -1
- package/locales/extra/nmg.mjs +2 -2
- package/locales/extra/nn.d.ts +1 -1
- package/locales/extra/nn.mjs +2 -2
- package/locales/extra/nnh.d.ts +1 -1
- package/locales/extra/nnh.mjs +2 -2
- package/locales/extra/no.d.ts +1 -1
- package/locales/extra/no.mjs +2 -2
- package/locales/extra/nus.d.ts +1 -1
- package/locales/extra/nus.mjs +2 -2
- package/locales/extra/nyn.d.ts +1 -1
- package/locales/extra/nyn.mjs +2 -2
- package/locales/extra/om-KE.d.ts +1 -1
- package/locales/extra/om-KE.mjs +2 -2
- package/locales/extra/om.d.ts +1 -1
- package/locales/extra/om.mjs +2 -2
- package/locales/extra/or.d.ts +1 -1
- package/locales/extra/or.mjs +2 -2
- package/locales/extra/os-RU.d.ts +1 -1
- package/locales/extra/os-RU.mjs +2 -2
- package/locales/extra/os.d.ts +1 -1
- package/locales/extra/os.mjs +2 -2
- package/locales/extra/pa-Arab.d.ts +1 -1
- package/locales/extra/pa-Arab.mjs +2 -2
- package/locales/extra/pa-Guru.d.ts +1 -1
- package/locales/extra/pa-Guru.mjs +2 -2
- package/locales/extra/pa.d.ts +1 -1
- package/locales/extra/pa.mjs +2 -2
- package/locales/extra/pcm.d.ts +1 -1
- package/locales/extra/pcm.mjs +2 -2
- package/locales/extra/pl.d.ts +1 -1
- package/locales/extra/pl.mjs +2 -2
- package/locales/extra/ps-PK.d.ts +1 -1
- package/locales/extra/ps-PK.mjs +2 -2
- package/locales/extra/ps.d.ts +1 -1
- package/locales/extra/ps.mjs +2 -2
- package/locales/extra/pt-AO.d.ts +1 -1
- package/locales/extra/pt-AO.mjs +2 -2
- package/locales/extra/pt-CH.d.ts +1 -1
- package/locales/extra/pt-CH.mjs +2 -2
- package/locales/extra/pt-CV.d.ts +1 -1
- package/locales/extra/pt-CV.mjs +2 -2
- package/locales/extra/pt-GQ.d.ts +1 -1
- package/locales/extra/pt-GQ.mjs +2 -2
- package/locales/extra/pt-GW.d.ts +1 -1
- package/locales/extra/pt-GW.mjs +2 -2
- package/locales/extra/pt-LU.d.ts +1 -1
- package/locales/extra/pt-LU.mjs +2 -2
- package/locales/extra/pt-MO.d.ts +1 -1
- package/locales/extra/pt-MO.mjs +2 -2
- package/locales/extra/pt-MZ.d.ts +1 -1
- package/locales/extra/pt-MZ.mjs +2 -2
- package/locales/extra/pt-PT.d.ts +1 -1
- package/locales/extra/pt-PT.mjs +2 -2
- package/locales/extra/pt-ST.d.ts +1 -1
- package/locales/extra/pt-ST.mjs +2 -2
- package/locales/extra/pt-TL.d.ts +1 -1
- package/locales/extra/pt-TL.mjs +2 -2
- package/locales/extra/pt.d.ts +1 -1
- package/locales/extra/pt.mjs +2 -2
- package/locales/extra/qu-BO.d.ts +1 -1
- package/locales/extra/qu-BO.mjs +2 -2
- package/locales/extra/qu-EC.d.ts +1 -1
- package/locales/extra/qu-EC.mjs +2 -2
- package/locales/extra/qu.d.ts +1 -1
- package/locales/extra/qu.mjs +2 -2
- package/locales/extra/rm.d.ts +1 -1
- package/locales/extra/rm.mjs +2 -2
- package/locales/extra/rn.d.ts +1 -1
- package/locales/extra/rn.mjs +2 -2
- package/locales/extra/ro-MD.d.ts +1 -1
- package/locales/extra/ro-MD.mjs +2 -2
- package/locales/extra/ro.d.ts +1 -1
- package/locales/extra/ro.mjs +2 -2
- package/locales/extra/rof.d.ts +1 -1
- package/locales/extra/rof.mjs +2 -2
- package/locales/extra/ru-BY.d.ts +1 -1
- package/locales/extra/ru-BY.mjs +2 -2
- package/locales/extra/ru-KG.d.ts +1 -1
- package/locales/extra/ru-KG.mjs +2 -2
- package/locales/extra/ru-KZ.d.ts +1 -1
- package/locales/extra/ru-KZ.mjs +2 -2
- package/locales/extra/ru-MD.d.ts +1 -1
- package/locales/extra/ru-MD.mjs +2 -2
- package/locales/extra/ru-UA.d.ts +1 -1
- package/locales/extra/ru-UA.mjs +2 -2
- package/locales/extra/ru.d.ts +1 -1
- package/locales/extra/ru.mjs +2 -2
- package/locales/extra/rw.d.ts +1 -1
- package/locales/extra/rw.mjs +2 -2
- package/locales/extra/rwk.d.ts +1 -1
- package/locales/extra/rwk.mjs +2 -2
- package/locales/extra/sa.d.ts +1 -1
- package/locales/extra/sa.mjs +2 -2
- package/locales/extra/sah.d.ts +1 -1
- package/locales/extra/sah.mjs +2 -2
- package/locales/extra/saq.d.ts +1 -1
- package/locales/extra/saq.mjs +2 -2
- package/locales/extra/sat-Olck.d.ts +1 -1
- package/locales/extra/sat-Olck.mjs +2 -2
- package/locales/extra/sat.d.ts +1 -1
- package/locales/extra/sat.mjs +2 -2
- package/locales/extra/sbp.d.ts +1 -1
- package/locales/extra/sbp.mjs +2 -2
- package/locales/extra/sc.d.ts +1 -1
- package/locales/extra/sc.mjs +2 -2
- package/locales/extra/sd-Arab.d.ts +1 -1
- package/locales/extra/sd-Arab.mjs +2 -2
- package/locales/extra/sd-Deva.d.ts +1 -1
- package/locales/extra/sd-Deva.mjs +2 -2
- package/locales/extra/sd.d.ts +1 -1
- package/locales/extra/sd.mjs +2 -2
- package/locales/extra/se-FI.d.ts +1 -1
- package/locales/extra/se-FI.mjs +2 -2
- package/locales/extra/se-SE.d.ts +1 -1
- package/locales/extra/se-SE.mjs +2 -2
- package/locales/extra/se.d.ts +1 -1
- package/locales/extra/se.mjs +2 -2
- package/locales/extra/seh.d.ts +1 -1
- package/locales/extra/seh.mjs +2 -2
- package/locales/extra/ses.d.ts +1 -1
- package/locales/extra/ses.mjs +2 -2
- package/locales/extra/sg.d.ts +1 -1
- package/locales/extra/sg.mjs +2 -2
- package/locales/extra/shi-Latn.d.ts +1 -1
- package/locales/extra/shi-Latn.mjs +2 -2
- package/locales/extra/shi-Tfng.d.ts +1 -1
- package/locales/extra/shi-Tfng.mjs +2 -2
- package/locales/extra/shi.d.ts +1 -1
- package/locales/extra/shi.mjs +2 -2
- package/locales/extra/si.d.ts +1 -1
- package/locales/extra/si.mjs +2 -2
- package/locales/extra/sk.d.ts +1 -1
- package/locales/extra/sk.mjs +2 -2
- package/locales/extra/sl.d.ts +1 -1
- package/locales/extra/sl.mjs +2 -2
- package/locales/extra/smn.d.ts +1 -1
- package/locales/extra/smn.mjs +2 -2
- package/locales/extra/sn.d.ts +1 -1
- package/locales/extra/sn.mjs +2 -2
- package/locales/extra/so-DJ.d.ts +1 -1
- package/locales/extra/so-DJ.mjs +2 -2
- package/locales/extra/so-ET.d.ts +1 -1
- package/locales/extra/so-ET.mjs +2 -2
- package/locales/extra/so-KE.d.ts +1 -1
- package/locales/extra/so-KE.mjs +2 -2
- package/locales/extra/so.d.ts +1 -1
- package/locales/extra/so.mjs +2 -2
- package/locales/extra/sq-MK.d.ts +1 -1
- package/locales/extra/sq-MK.mjs +2 -2
- package/locales/extra/sq-XK.d.ts +1 -1
- package/locales/extra/sq-XK.mjs +2 -2
- package/locales/extra/sq.d.ts +1 -1
- package/locales/extra/sq.mjs +2 -2
- package/locales/extra/sr-Cyrl-BA.d.ts +1 -1
- package/locales/extra/sr-Cyrl-BA.mjs +2 -2
- package/locales/extra/sr-Cyrl-ME.d.ts +1 -1
- package/locales/extra/sr-Cyrl-ME.mjs +2 -2
- package/locales/extra/sr-Cyrl-XK.d.ts +1 -1
- package/locales/extra/sr-Cyrl-XK.mjs +2 -2
- package/locales/extra/sr-Cyrl.d.ts +1 -1
- package/locales/extra/sr-Cyrl.mjs +2 -2
- package/locales/extra/sr-Latn-BA.d.ts +1 -1
- package/locales/extra/sr-Latn-BA.mjs +2 -2
- package/locales/extra/sr-Latn-ME.d.ts +1 -1
- package/locales/extra/sr-Latn-ME.mjs +2 -2
- package/locales/extra/sr-Latn-XK.d.ts +1 -1
- package/locales/extra/sr-Latn-XK.mjs +2 -2
- package/locales/extra/sr-Latn.d.ts +1 -1
- package/locales/extra/sr-Latn.mjs +2 -2
- package/locales/extra/sr.d.ts +1 -1
- package/locales/extra/sr.mjs +2 -2
- package/locales/extra/su-Latn.d.ts +1 -1
- package/locales/extra/su-Latn.mjs +2 -2
- package/locales/extra/su.d.ts +1 -1
- package/locales/extra/su.mjs +2 -2
- package/locales/extra/sv-AX.d.ts +1 -1
- package/locales/extra/sv-AX.mjs +2 -2
- package/locales/extra/sv-FI.d.ts +1 -1
- package/locales/extra/sv-FI.mjs +2 -2
- package/locales/extra/sv.d.ts +1 -1
- package/locales/extra/sv.mjs +2 -2
- package/locales/extra/sw-CD.d.ts +1 -1
- package/locales/extra/sw-CD.mjs +2 -2
- package/locales/extra/sw-KE.d.ts +1 -1
- package/locales/extra/sw-KE.mjs +2 -2
- package/locales/extra/sw-UG.d.ts +1 -1
- package/locales/extra/sw-UG.mjs +2 -2
- package/locales/extra/sw.d.ts +1 -1
- package/locales/extra/sw.mjs +2 -2
- package/locales/extra/ta-LK.d.ts +1 -1
- package/locales/extra/ta-LK.mjs +2 -2
- package/locales/extra/ta-MY.d.ts +1 -1
- package/locales/extra/ta-MY.mjs +2 -2
- package/locales/extra/ta-SG.d.ts +1 -1
- package/locales/extra/ta-SG.mjs +2 -2
- package/locales/extra/ta.d.ts +1 -1
- package/locales/extra/ta.mjs +2 -2
- package/locales/extra/te.d.ts +1 -1
- package/locales/extra/te.mjs +2 -2
- package/locales/extra/teo-KE.d.ts +1 -1
- package/locales/extra/teo-KE.mjs +2 -2
- package/locales/extra/teo.d.ts +1 -1
- package/locales/extra/teo.mjs +2 -2
- package/locales/extra/tg.d.ts +1 -1
- package/locales/extra/tg.mjs +2 -2
- package/locales/extra/th.d.ts +1 -1
- package/locales/extra/th.mjs +2 -2
- package/locales/extra/ti-ER.d.ts +1 -1
- package/locales/extra/ti-ER.mjs +2 -2
- package/locales/extra/ti.d.ts +1 -1
- package/locales/extra/ti.mjs +2 -2
- package/locales/extra/tk.d.ts +1 -1
- package/locales/extra/tk.mjs +2 -2
- package/locales/extra/to.d.ts +1 -1
- package/locales/extra/to.mjs +2 -2
- package/locales/extra/tr-CY.d.ts +1 -1
- package/locales/extra/tr-CY.mjs +2 -2
- package/locales/extra/tr.d.ts +1 -1
- package/locales/extra/tr.mjs +2 -2
- package/locales/extra/tt.d.ts +1 -1
- package/locales/extra/tt.mjs +2 -2
- package/locales/extra/twq.d.ts +1 -1
- package/locales/extra/twq.mjs +2 -2
- package/locales/extra/tzm.d.ts +1 -1
- package/locales/extra/tzm.mjs +2 -2
- package/locales/extra/ug.d.ts +1 -1
- package/locales/extra/ug.mjs +2 -2
- package/locales/extra/uk.d.ts +1 -1
- package/locales/extra/uk.mjs +2 -2
- package/locales/extra/und.d.ts +1 -1
- package/locales/extra/und.mjs +2 -2
- package/locales/extra/ur-IN.d.ts +1 -1
- package/locales/extra/ur-IN.mjs +2 -2
- package/locales/extra/ur.d.ts +1 -1
- package/locales/extra/ur.mjs +2 -2
- package/locales/extra/uz-Arab.d.ts +1 -1
- package/locales/extra/uz-Arab.mjs +2 -2
- package/locales/extra/uz-Cyrl.d.ts +1 -1
- package/locales/extra/uz-Cyrl.mjs +2 -2
- package/locales/extra/uz-Latn.d.ts +1 -1
- package/locales/extra/uz-Latn.mjs +2 -2
- package/locales/extra/uz.d.ts +1 -1
- package/locales/extra/uz.mjs +2 -2
- package/locales/extra/vai-Latn.d.ts +1 -1
- package/locales/extra/vai-Latn.mjs +2 -2
- package/locales/extra/vai-Vaii.d.ts +1 -1
- package/locales/extra/vai-Vaii.mjs +2 -2
- package/locales/extra/vai.d.ts +1 -1
- package/locales/extra/vai.mjs +2 -2
- package/locales/extra/vi.d.ts +1 -1
- package/locales/extra/vi.mjs +2 -2
- package/locales/extra/vun.d.ts +1 -1
- package/locales/extra/vun.mjs +2 -2
- package/locales/extra/wae.d.ts +1 -1
- package/locales/extra/wae.mjs +2 -2
- package/locales/extra/wo.d.ts +1 -1
- package/locales/extra/wo.mjs +2 -2
- package/locales/extra/xh.d.ts +1 -1
- package/locales/extra/xh.mjs +2 -2
- package/locales/extra/xog.d.ts +1 -1
- package/locales/extra/xog.mjs +2 -2
- package/locales/extra/yav.d.ts +1 -1
- package/locales/extra/yav.mjs +2 -2
- package/locales/extra/yi.d.ts +1 -1
- package/locales/extra/yi.mjs +2 -2
- package/locales/extra/yo-BJ.d.ts +1 -1
- package/locales/extra/yo-BJ.mjs +2 -2
- package/locales/extra/yo.d.ts +1 -1
- package/locales/extra/yo.mjs +2 -2
- package/locales/extra/yrl-CO.d.ts +1 -1
- package/locales/extra/yrl-CO.mjs +2 -2
- package/locales/extra/yrl-VE.d.ts +1 -1
- package/locales/extra/yrl-VE.mjs +2 -2
- package/locales/extra/yrl.d.ts +1 -1
- package/locales/extra/yrl.mjs +2 -2
- package/locales/extra/yue-Hans.d.ts +1 -1
- package/locales/extra/yue-Hans.mjs +2 -2
- package/locales/extra/yue-Hant.d.ts +1 -1
- package/locales/extra/yue-Hant.mjs +2 -2
- package/locales/extra/yue.d.ts +1 -1
- package/locales/extra/yue.mjs +2 -2
- package/locales/extra/zgh.d.ts +1 -1
- package/locales/extra/zgh.mjs +2 -2
- package/locales/extra/zh-Hans-HK.d.ts +1 -1
- package/locales/extra/zh-Hans-HK.mjs +2 -2
- package/locales/extra/zh-Hans-MO.d.ts +1 -1
- package/locales/extra/zh-Hans-MO.mjs +2 -2
- package/locales/extra/zh-Hans-SG.d.ts +1 -1
- package/locales/extra/zh-Hans-SG.mjs +2 -2
- package/locales/extra/zh-Hans.d.ts +1 -1
- package/locales/extra/zh-Hans.mjs +2 -2
- package/locales/extra/zh-Hant-HK.d.ts +1 -1
- package/locales/extra/zh-Hant-HK.mjs +2 -2
- package/locales/extra/zh-Hant-MO.d.ts +1 -1
- package/locales/extra/zh-Hant-MO.mjs +2 -2
- package/locales/extra/zh-Hant.d.ts +1 -1
- package/locales/extra/zh-Hant.mjs +2 -2
- package/locales/extra/zh.d.ts +1 -1
- package/locales/extra/zh.mjs +2 -2
- package/locales/extra/zu.d.ts +1 -1
- package/locales/extra/zu.mjs +2 -2
- package/locales/fa-AF.d.ts +1 -1
- package/locales/fa-AF.mjs +2 -2
- package/locales/fa.d.ts +1 -1
- package/locales/fa.mjs +2 -2
- package/locales/ff-Adlm-BF.d.ts +1 -1
- package/locales/ff-Adlm-BF.mjs +2 -2
- package/locales/ff-Adlm-CM.d.ts +1 -1
- package/locales/ff-Adlm-CM.mjs +2 -2
- package/locales/ff-Adlm-GH.d.ts +1 -1
- package/locales/ff-Adlm-GH.mjs +2 -2
- package/locales/ff-Adlm-GM.d.ts +1 -1
- package/locales/ff-Adlm-GM.mjs +2 -2
- package/locales/ff-Adlm-GW.d.ts +1 -1
- package/locales/ff-Adlm-GW.mjs +2 -2
- package/locales/ff-Adlm-LR.d.ts +1 -1
- package/locales/ff-Adlm-LR.mjs +2 -2
- package/locales/ff-Adlm-MR.d.ts +1 -1
- package/locales/ff-Adlm-MR.mjs +2 -2
- package/locales/ff-Adlm-NE.d.ts +1 -1
- package/locales/ff-Adlm-NE.mjs +2 -2
- package/locales/ff-Adlm-NG.d.ts +1 -1
- package/locales/ff-Adlm-NG.mjs +2 -2
- package/locales/ff-Adlm-SL.d.ts +1 -1
- package/locales/ff-Adlm-SL.mjs +2 -2
- package/locales/ff-Adlm-SN.d.ts +1 -1
- package/locales/ff-Adlm-SN.mjs +2 -2
- package/locales/ff-Adlm.d.ts +1 -1
- package/locales/ff-Adlm.mjs +2 -2
- package/locales/ff-CM.d.ts +1 -1
- package/locales/ff-CM.mjs +2 -2
- package/locales/ff-GN.d.ts +1 -1
- package/locales/ff-GN.mjs +2 -2
- package/locales/ff-Latn-BF.d.ts +1 -1
- package/locales/ff-Latn-BF.mjs +2 -2
- package/locales/ff-Latn-CM.d.ts +1 -1
- package/locales/ff-Latn-CM.mjs +2 -2
- package/locales/ff-Latn-GH.d.ts +1 -1
- package/locales/ff-Latn-GH.mjs +2 -2
- package/locales/ff-Latn-GM.d.ts +1 -1
- package/locales/ff-Latn-GM.mjs +2 -2
- package/locales/ff-Latn-GN.d.ts +1 -1
- package/locales/ff-Latn-GN.mjs +2 -2
- package/locales/ff-Latn-GW.d.ts +1 -1
- package/locales/ff-Latn-GW.mjs +2 -2
- package/locales/ff-Latn-LR.d.ts +1 -1
- package/locales/ff-Latn-LR.mjs +2 -2
- package/locales/ff-Latn-MR.d.ts +1 -1
- package/locales/ff-Latn-MR.mjs +2 -2
- package/locales/ff-Latn-NE.d.ts +1 -1
- package/locales/ff-Latn-NE.mjs +2 -2
- package/locales/ff-Latn-NG.d.ts +1 -1
- package/locales/ff-Latn-NG.mjs +2 -2
- package/locales/ff-Latn-SL.d.ts +1 -1
- package/locales/ff-Latn-SL.mjs +2 -2
- package/locales/ff-Latn.d.ts +1 -1
- package/locales/ff-Latn.mjs +2 -2
- package/locales/ff-MR.d.ts +1 -1
- package/locales/ff-MR.mjs +2 -2
- package/locales/ff.d.ts +1 -1
- package/locales/ff.mjs +2 -2
- package/locales/fi.d.ts +1 -1
- package/locales/fi.mjs +2 -2
- package/locales/fil.d.ts +1 -1
- package/locales/fil.mjs +2 -2
- package/locales/fo-DK.d.ts +1 -1
- package/locales/fo-DK.mjs +2 -2
- package/locales/fo.d.ts +1 -1
- package/locales/fo.mjs +2 -2
- package/locales/fr-BE.d.ts +1 -1
- package/locales/fr-BE.mjs +2 -2
- package/locales/fr-BF.d.ts +1 -1
- package/locales/fr-BF.mjs +2 -2
- package/locales/fr-BI.d.ts +1 -1
- package/locales/fr-BI.mjs +2 -2
- package/locales/fr-BJ.d.ts +1 -1
- package/locales/fr-BJ.mjs +2 -2
- package/locales/fr-BL.d.ts +1 -1
- package/locales/fr-BL.mjs +2 -2
- package/locales/fr-CA.d.ts +1 -1
- package/locales/fr-CA.mjs +2 -2
- package/locales/fr-CD.d.ts +1 -1
- package/locales/fr-CD.mjs +2 -2
- package/locales/fr-CF.d.ts +1 -1
- package/locales/fr-CF.mjs +2 -2
- package/locales/fr-CG.d.ts +1 -1
- package/locales/fr-CG.mjs +2 -2
- package/locales/fr-CH.d.ts +1 -1
- package/locales/fr-CH.mjs +2 -2
- package/locales/fr-CI.d.ts +1 -1
- package/locales/fr-CI.mjs +2 -2
- package/locales/fr-CM.d.ts +1 -1
- package/locales/fr-CM.mjs +2 -2
- package/locales/fr-DJ.d.ts +1 -1
- package/locales/fr-DJ.mjs +2 -2
- package/locales/fr-DZ.d.ts +1 -1
- package/locales/fr-DZ.mjs +2 -2
- package/locales/fr-GA.d.ts +1 -1
- package/locales/fr-GA.mjs +2 -2
- package/locales/fr-GF.d.ts +1 -1
- package/locales/fr-GF.mjs +2 -2
- package/locales/fr-GN.d.ts +1 -1
- package/locales/fr-GN.mjs +2 -2
- package/locales/fr-GP.d.ts +1 -1
- package/locales/fr-GP.mjs +2 -2
- package/locales/fr-GQ.d.ts +1 -1
- package/locales/fr-GQ.mjs +2 -2
- package/locales/fr-HT.d.ts +1 -1
- package/locales/fr-HT.mjs +2 -2
- package/locales/fr-KM.d.ts +1 -1
- package/locales/fr-KM.mjs +2 -2
- package/locales/fr-LU.d.ts +1 -1
- package/locales/fr-LU.mjs +2 -2
- package/locales/fr-MA.d.ts +1 -1
- package/locales/fr-MA.mjs +2 -2
- package/locales/fr-MC.d.ts +1 -1
- package/locales/fr-MC.mjs +2 -2
- package/locales/fr-MF.d.ts +1 -1
- package/locales/fr-MF.mjs +2 -2
- package/locales/fr-MG.d.ts +1 -1
- package/locales/fr-MG.mjs +2 -2
- package/locales/fr-ML.d.ts +1 -1
- package/locales/fr-ML.mjs +2 -2
- package/locales/fr-MQ.d.ts +1 -1
- package/locales/fr-MQ.mjs +2 -2
- package/locales/fr-MR.d.ts +1 -1
- package/locales/fr-MR.mjs +2 -2
- package/locales/fr-MU.d.ts +1 -1
- package/locales/fr-MU.mjs +2 -2
- package/locales/fr-NC.d.ts +1 -1
- package/locales/fr-NC.mjs +2 -2
- package/locales/fr-NE.d.ts +1 -1
- package/locales/fr-NE.mjs +2 -2
- package/locales/fr-PF.d.ts +1 -1
- package/locales/fr-PF.mjs +2 -2
- package/locales/fr-PM.d.ts +1 -1
- package/locales/fr-PM.mjs +2 -2
- package/locales/fr-RE.d.ts +1 -1
- package/locales/fr-RE.mjs +2 -2
- package/locales/fr-RW.d.ts +1 -1
- package/locales/fr-RW.mjs +2 -2
- package/locales/fr-SC.d.ts +1 -1
- package/locales/fr-SC.mjs +2 -2
- package/locales/fr-SN.d.ts +1 -1
- package/locales/fr-SN.mjs +2 -2
- package/locales/fr-SY.d.ts +1 -1
- package/locales/fr-SY.mjs +2 -2
- package/locales/fr-TD.d.ts +1 -1
- package/locales/fr-TD.mjs +2 -2
- package/locales/fr-TG.d.ts +1 -1
- package/locales/fr-TG.mjs +2 -2
- package/locales/fr-TN.d.ts +1 -1
- package/locales/fr-TN.mjs +2 -2
- package/locales/fr-VU.d.ts +1 -1
- package/locales/fr-VU.mjs +2 -2
- package/locales/fr-WF.d.ts +1 -1
- package/locales/fr-WF.mjs +2 -2
- package/locales/fr-YT.d.ts +1 -1
- package/locales/fr-YT.mjs +2 -2
- package/locales/fr.d.ts +1 -1
- package/locales/fr.mjs +2 -2
- package/locales/fur.d.ts +1 -1
- package/locales/fur.mjs +2 -2
- package/locales/fy.d.ts +1 -1
- package/locales/fy.mjs +2 -2
- package/locales/ga-GB.d.ts +1 -1
- package/locales/ga-GB.mjs +2 -2
- package/locales/ga.d.ts +1 -1
- package/locales/ga.mjs +2 -2
- package/locales/gd.d.ts +1 -1
- package/locales/gd.mjs +2 -2
- package/locales/gl.d.ts +1 -1
- package/locales/gl.mjs +2 -2
- package/locales/global/af-NA.js +1 -1
- package/locales/global/af.js +1 -1
- package/locales/global/agq.js +1 -1
- package/locales/global/ak.js +1 -1
- package/locales/global/am.js +1 -1
- package/locales/global/ar-AE.js +1 -1
- package/locales/global/ar-BH.js +1 -1
- package/locales/global/ar-DJ.js +1 -1
- package/locales/global/ar-DZ.js +1 -1
- package/locales/global/ar-EG.js +1 -1
- package/locales/global/ar-EH.js +1 -1
- package/locales/global/ar-ER.js +1 -1
- package/locales/global/ar-IL.js +1 -1
- package/locales/global/ar-IQ.js +1 -1
- package/locales/global/ar-JO.js +1 -1
- package/locales/global/ar-KM.js +1 -1
- package/locales/global/ar-KW.js +1 -1
- package/locales/global/ar-LB.js +1 -1
- package/locales/global/ar-LY.js +1 -1
- package/locales/global/ar-MA.js +1 -1
- package/locales/global/ar-MR.js +1 -1
- package/locales/global/ar-OM.js +1 -1
- package/locales/global/ar-PS.js +1 -1
- package/locales/global/ar-QA.js +1 -1
- package/locales/global/ar-SA.js +1 -1
- package/locales/global/ar-SD.js +1 -1
- package/locales/global/ar-SO.js +1 -1
- package/locales/global/ar-SS.js +1 -1
- package/locales/global/ar-SY.js +1 -1
- package/locales/global/ar-TD.js +1 -1
- package/locales/global/ar-TN.js +1 -1
- package/locales/global/ar-YE.js +1 -1
- package/locales/global/ar.js +1 -1
- package/locales/global/as.js +1 -1
- package/locales/global/asa.js +1 -1
- package/locales/global/ast.js +1 -1
- package/locales/global/az-Cyrl.js +1 -1
- package/locales/global/az-Latn.js +1 -1
- package/locales/global/az.js +1 -1
- package/locales/global/bas.js +1 -1
- package/locales/global/be-tarask.js +1 -1
- package/locales/global/be.js +1 -1
- package/locales/global/bem.js +1 -1
- package/locales/global/bez.js +1 -1
- package/locales/global/bg.js +1 -1
- package/locales/global/bm.js +1 -1
- package/locales/global/bn-IN.js +1 -1
- package/locales/global/bn.js +1 -1
- package/locales/global/bo-IN.js +1 -1
- package/locales/global/bo.js +1 -1
- package/locales/global/br.js +1 -1
- package/locales/global/brx.js +1 -1
- package/locales/global/bs-Cyrl.js +1 -1
- package/locales/global/bs-Latn.js +1 -1
- package/locales/global/bs.js +1 -1
- package/locales/global/ca-AD.js +1 -1
- package/locales/global/ca-ES-valencia.js +1 -1
- package/locales/global/ca-FR.js +1 -1
- package/locales/global/ca-IT.js +1 -1
- package/locales/global/ca.js +1 -1
- package/locales/global/ccp-IN.js +1 -1
- package/locales/global/ccp.js +1 -1
- package/locales/global/ce.js +1 -1
- package/locales/global/ceb.js +1 -1
- package/locales/global/cgg.js +1 -1
- package/locales/global/chr.js +1 -1
- package/locales/global/ckb-IR.js +1 -1
- package/locales/global/ckb.js +1 -1
- package/locales/global/cs.js +1 -1
- package/locales/global/cy.js +1 -1
- package/locales/global/da-GL.js +1 -1
- package/locales/global/da.js +1 -1
- package/locales/global/dav.js +1 -1
- package/locales/global/de-AT.js +1 -1
- package/locales/global/de-BE.js +1 -1
- package/locales/global/de-CH.js +1 -1
- package/locales/global/de-IT.js +1 -1
- package/locales/global/de-LI.js +1 -1
- package/locales/global/de-LU.js +1 -1
- package/locales/global/de.js +1 -1
- package/locales/global/dje.js +1 -1
- package/locales/global/doi.js +1 -1
- package/locales/global/dsb.js +1 -1
- package/locales/global/dua.js +1 -1
- package/locales/global/dyo.js +1 -1
- package/locales/global/dz.js +1 -1
- package/locales/global/ebu.js +1 -1
- package/locales/global/ee-TG.js +1 -1
- package/locales/global/ee.js +1 -1
- package/locales/global/el-CY.js +1 -1
- package/locales/global/el.js +1 -1
- package/locales/global/en-001.js +1 -1
- package/locales/global/en-150.js +1 -1
- package/locales/global/en-AE.js +1 -1
- package/locales/global/en-AG.js +1 -1
- package/locales/global/en-AI.js +1 -1
- package/locales/global/en-AS.js +1 -1
- package/locales/global/en-AT.js +1 -1
- package/locales/global/en-AU.js +1 -1
- package/locales/global/en-BB.js +1 -1
- package/locales/global/en-BE.js +1 -1
- package/locales/global/en-BI.js +1 -1
- package/locales/global/en-BM.js +1 -1
- package/locales/global/en-BS.js +1 -1
- package/locales/global/en-BW.js +1 -1
- package/locales/global/en-BZ.js +1 -1
- package/locales/global/en-CA.js +1 -1
- package/locales/global/en-CC.js +1 -1
- package/locales/global/en-CH.js +1 -1
- package/locales/global/en-CK.js +1 -1
- package/locales/global/en-CM.js +1 -1
- package/locales/global/en-CX.js +1 -1
- package/locales/global/en-CY.js +1 -1
- package/locales/global/en-DE.js +1 -1
- package/locales/global/en-DG.js +1 -1
- package/locales/global/en-DK.js +1 -1
- package/locales/global/en-DM.js +1 -1
- package/locales/global/en-ER.js +1 -1
- package/locales/global/en-FI.js +1 -1
- package/locales/global/en-FJ.js +1 -1
- package/locales/global/en-FK.js +1 -1
- package/locales/global/en-FM.js +1 -1
- package/locales/global/en-GB.js +1 -1
- package/locales/global/en-GD.js +1 -1
- package/locales/global/en-GG.js +1 -1
- package/locales/global/en-GH.js +1 -1
- package/locales/global/en-GI.js +1 -1
- package/locales/global/en-GM.js +1 -1
- package/locales/global/en-GU.js +1 -1
- package/locales/global/en-GY.js +1 -1
- package/locales/global/en-HK.js +1 -1
- package/locales/global/en-IE.js +1 -1
- package/locales/global/en-IL.js +1 -1
- package/locales/global/en-IM.js +1 -1
- package/locales/global/en-IN.js +1 -1
- package/locales/global/en-IO.js +1 -1
- package/locales/global/en-JE.js +1 -1
- package/locales/global/en-JM.js +1 -1
- package/locales/global/en-KE.js +1 -1
- package/locales/global/en-KI.js +1 -1
- package/locales/global/en-KN.js +1 -1
- package/locales/global/en-KY.js +1 -1
- package/locales/global/en-LC.js +1 -1
- package/locales/global/en-LR.js +1 -1
- package/locales/global/en-LS.js +1 -1
- package/locales/global/en-MG.js +1 -1
- package/locales/global/en-MH.js +1 -1
- package/locales/global/en-MO.js +1 -1
- package/locales/global/en-MP.js +1 -1
- package/locales/global/en-MS.js +1 -1
- package/locales/global/en-MT.js +1 -1
- package/locales/global/en-MU.js +1 -1
- package/locales/global/en-MV.js +1 -1
- package/locales/global/en-MW.js +1 -1
- package/locales/global/en-MY.js +1 -1
- package/locales/global/en-NA.js +1 -1
- package/locales/global/en-NF.js +1 -1
- package/locales/global/en-NG.js +1 -1
- package/locales/global/en-NL.js +1 -1
- package/locales/global/en-NR.js +1 -1
- package/locales/global/en-NU.js +1 -1
- package/locales/global/en-NZ.js +1 -1
- package/locales/global/en-PG.js +1 -1
- package/locales/global/en-PH.js +1 -1
- package/locales/global/en-PK.js +1 -1
- package/locales/global/en-PN.js +1 -1
- package/locales/global/en-PR.js +1 -1
- package/locales/global/en-PW.js +1 -1
- package/locales/global/en-RW.js +1 -1
- package/locales/global/en-SB.js +1 -1
- package/locales/global/en-SC.js +1 -1
- package/locales/global/en-SD.js +1 -1
- package/locales/global/en-SE.js +1 -1
- package/locales/global/en-SG.js +1 -1
- package/locales/global/en-SH.js +1 -1
- package/locales/global/en-SI.js +1 -1
- package/locales/global/en-SL.js +1 -1
- package/locales/global/en-SS.js +1 -1
- package/locales/global/en-SX.js +1 -1
- package/locales/global/en-SZ.js +1 -1
- package/locales/global/en-TC.js +1 -1
- package/locales/global/en-TK.js +1 -1
- package/locales/global/en-TO.js +1 -1
- package/locales/global/en-TT.js +1 -1
- package/locales/global/en-TV.js +1 -1
- package/locales/global/en-TZ.js +1 -1
- package/locales/global/en-UG.js +1 -1
- package/locales/global/en-UM.js +1 -1
- package/locales/global/en-VC.js +1 -1
- package/locales/global/en-VG.js +1 -1
- package/locales/global/en-VI.js +1 -1
- package/locales/global/en-VU.js +1 -1
- package/locales/global/en-WS.js +1 -1
- package/locales/global/en-ZA.js +1 -1
- package/locales/global/en-ZM.js +1 -1
- package/locales/global/en-ZW.js +1 -1
- package/locales/global/en.js +1 -1
- package/locales/global/eo.js +1 -1
- package/locales/global/es-419.js +1 -1
- package/locales/global/es-AR.js +1 -1
- package/locales/global/es-BO.js +1 -1
- package/locales/global/es-BR.js +1 -1
- package/locales/global/es-BZ.js +1 -1
- package/locales/global/es-CL.js +1 -1
- package/locales/global/es-CO.js +1 -1
- package/locales/global/es-CR.js +1 -1
- package/locales/global/es-CU.js +1 -1
- package/locales/global/es-DO.js +1 -1
- package/locales/global/es-EA.js +1 -1
- package/locales/global/es-EC.js +1 -1
- package/locales/global/es-GQ.js +1 -1
- package/locales/global/es-GT.js +1 -1
- package/locales/global/es-HN.js +1 -1
- package/locales/global/es-IC.js +1 -1
- package/locales/global/es-MX.js +1 -1
- package/locales/global/es-NI.js +1 -1
- package/locales/global/es-PA.js +1 -1
- package/locales/global/es-PE.js +1 -1
- package/locales/global/es-PH.js +1 -1
- package/locales/global/es-PR.js +1 -1
- package/locales/global/es-PY.js +1 -1
- package/locales/global/es-SV.js +1 -1
- package/locales/global/es-US.js +1 -1
- package/locales/global/es-UY.js +1 -1
- package/locales/global/es-VE.js +1 -1
- package/locales/global/es.js +1 -1
- package/locales/global/et.js +1 -1
- package/locales/global/eu.js +1 -1
- package/locales/global/ewo.js +1 -1
- package/locales/global/fa-AF.js +1 -1
- package/locales/global/fa.js +1 -1
- package/locales/global/ff-Adlm-BF.js +1 -1
- package/locales/global/ff-Adlm-CM.js +1 -1
- package/locales/global/ff-Adlm-GH.js +1 -1
- package/locales/global/ff-Adlm-GM.js +1 -1
- package/locales/global/ff-Adlm-GW.js +1 -1
- package/locales/global/ff-Adlm-LR.js +1 -1
- package/locales/global/ff-Adlm-MR.js +1 -1
- package/locales/global/ff-Adlm-NE.js +1 -1
- package/locales/global/ff-Adlm-NG.js +1 -1
- package/locales/global/ff-Adlm-SL.js +1 -1
- package/locales/global/ff-Adlm-SN.js +1 -1
- package/locales/global/ff-Adlm.js +1 -1
- package/locales/global/ff-CM.js +1 -1
- package/locales/global/ff-GN.js +1 -1
- package/locales/global/ff-Latn-BF.js +1 -1
- package/locales/global/ff-Latn-CM.js +1 -1
- package/locales/global/ff-Latn-GH.js +1 -1
- package/locales/global/ff-Latn-GM.js +1 -1
- package/locales/global/ff-Latn-GN.js +1 -1
- package/locales/global/ff-Latn-GW.js +1 -1
- package/locales/global/ff-Latn-LR.js +1 -1
- package/locales/global/ff-Latn-MR.js +1 -1
- package/locales/global/ff-Latn-NE.js +1 -1
- package/locales/global/ff-Latn-NG.js +1 -1
- package/locales/global/ff-Latn-SL.js +1 -1
- package/locales/global/ff-Latn.js +1 -1
- package/locales/global/ff-MR.js +1 -1
- package/locales/global/ff.js +1 -1
- package/locales/global/fi.js +1 -1
- package/locales/global/fil.js +1 -1
- package/locales/global/fo-DK.js +1 -1
- package/locales/global/fo.js +1 -1
- package/locales/global/fr-BE.js +1 -1
- package/locales/global/fr-BF.js +1 -1
- package/locales/global/fr-BI.js +1 -1
- package/locales/global/fr-BJ.js +1 -1
- package/locales/global/fr-BL.js +1 -1
- package/locales/global/fr-CA.js +1 -1
- package/locales/global/fr-CD.js +1 -1
- package/locales/global/fr-CF.js +1 -1
- package/locales/global/fr-CG.js +1 -1
- package/locales/global/fr-CH.js +1 -1
- package/locales/global/fr-CI.js +1 -1
- package/locales/global/fr-CM.js +1 -1
- package/locales/global/fr-DJ.js +1 -1
- package/locales/global/fr-DZ.js +1 -1
- package/locales/global/fr-GA.js +1 -1
- package/locales/global/fr-GF.js +1 -1
- package/locales/global/fr-GN.js +1 -1
- package/locales/global/fr-GP.js +1 -1
- package/locales/global/fr-GQ.js +1 -1
- package/locales/global/fr-HT.js +1 -1
- package/locales/global/fr-KM.js +1 -1
- package/locales/global/fr-LU.js +1 -1
- package/locales/global/fr-MA.js +1 -1
- package/locales/global/fr-MC.js +1 -1
- package/locales/global/fr-MF.js +1 -1
- package/locales/global/fr-MG.js +1 -1
- package/locales/global/fr-ML.js +1 -1
- package/locales/global/fr-MQ.js +1 -1
- package/locales/global/fr-MR.js +1 -1
- package/locales/global/fr-MU.js +1 -1
- package/locales/global/fr-NC.js +1 -1
- package/locales/global/fr-NE.js +1 -1
- package/locales/global/fr-PF.js +1 -1
- package/locales/global/fr-PM.js +1 -1
- package/locales/global/fr-RE.js +1 -1
- package/locales/global/fr-RW.js +1 -1
- package/locales/global/fr-SC.js +1 -1
- package/locales/global/fr-SN.js +1 -1
- package/locales/global/fr-SY.js +1 -1
- package/locales/global/fr-TD.js +1 -1
- package/locales/global/fr-TG.js +1 -1
- package/locales/global/fr-TN.js +1 -1
- package/locales/global/fr-VU.js +1 -1
- package/locales/global/fr-WF.js +1 -1
- package/locales/global/fr-YT.js +1 -1
- package/locales/global/fr.js +1 -1
- package/locales/global/fur.js +1 -1
- package/locales/global/fy.js +1 -1
- package/locales/global/ga-GB.js +1 -1
- package/locales/global/ga.js +1 -1
- package/locales/global/gd.js +1 -1
- package/locales/global/gl.js +1 -1
- package/locales/global/gsw-FR.js +1 -1
- package/locales/global/gsw-LI.js +1 -1
- package/locales/global/gsw.js +1 -1
- package/locales/global/gu.js +1 -1
- package/locales/global/guz.js +1 -1
- package/locales/global/gv.js +1 -1
- package/locales/global/ha-GH.js +1 -1
- package/locales/global/ha-NE.js +1 -1
- package/locales/global/ha.js +1 -1
- package/locales/global/haw.js +1 -1
- package/locales/global/he.js +1 -1
- package/locales/global/hi-Latn.js +1 -1
- package/locales/global/hi.js +1 -1
- package/locales/global/hr-BA.js +1 -1
- package/locales/global/hr.js +1 -1
- package/locales/global/hsb.js +1 -1
- package/locales/global/hu.js +1 -1
- package/locales/global/hy.js +1 -1
- package/locales/global/ia.js +1 -1
- package/locales/global/id.js +1 -1
- package/locales/global/ig.js +1 -1
- package/locales/global/ii.js +1 -1
- package/locales/global/is.js +1 -1
- package/locales/global/it-CH.js +1 -1
- package/locales/global/it-SM.js +1 -1
- package/locales/global/it-VA.js +1 -1
- package/locales/global/it.js +1 -1
- package/locales/global/ja.js +1 -1
- package/locales/global/jgo.js +1 -1
- package/locales/global/jmc.js +1 -1
- package/locales/global/jv.js +1 -1
- package/locales/global/ka.js +1 -1
- package/locales/global/kab.js +1 -1
- package/locales/global/kam.js +1 -1
- package/locales/global/kde.js +1 -1
- package/locales/global/kea.js +1 -1
- package/locales/global/kgp.js +1 -1
- package/locales/global/khq.js +1 -1
- package/locales/global/ki.js +1 -1
- package/locales/global/kk.js +1 -1
- package/locales/global/kkj.js +1 -1
- package/locales/global/kl.js +1 -1
- package/locales/global/kln.js +1 -1
- package/locales/global/km.js +1 -1
- package/locales/global/kn.js +1 -1
- package/locales/global/ko-KP.js +1 -1
- package/locales/global/ko.js +1 -1
- package/locales/global/kok.js +1 -1
- package/locales/global/ks-Arab.js +1 -1
- package/locales/global/ks-Deva.js +1 -1
- package/locales/global/ks.js +1 -1
- package/locales/global/ksb.js +1 -1
- package/locales/global/ksf.js +1 -1
- package/locales/global/ksh.js +1 -1
- package/locales/global/ku.js +1 -1
- package/locales/global/kw.js +1 -1
- package/locales/global/ky.js +1 -1
- package/locales/global/lag.js +1 -1
- package/locales/global/lb.js +1 -1
- package/locales/global/lg.js +1 -1
- package/locales/global/lkt.js +1 -1
- package/locales/global/ln-AO.js +1 -1
- package/locales/global/ln-CF.js +1 -1
- package/locales/global/ln-CG.js +1 -1
- package/locales/global/ln.js +1 -1
- package/locales/global/lo.js +1 -1
- package/locales/global/lrc-IQ.js +1 -1
- package/locales/global/lrc.js +1 -1
- package/locales/global/lt.js +1 -1
- package/locales/global/lu.js +1 -1
- package/locales/global/luo.js +1 -1
- package/locales/global/luy.js +1 -1
- package/locales/global/lv.js +1 -1
- package/locales/global/mai.js +1 -1
- package/locales/global/mas-TZ.js +1 -1
- package/locales/global/mas.js +1 -1
- package/locales/global/mer.js +1 -1
- package/locales/global/mfe.js +1 -1
- package/locales/global/mg.js +1 -1
- package/locales/global/mgh.js +1 -1
- package/locales/global/mgo.js +1 -1
- package/locales/global/mi.js +1 -1
- package/locales/global/mk.js +1 -1
- package/locales/global/ml.js +1 -1
- package/locales/global/mn.js +1 -1
- package/locales/global/mni-Beng.js +1 -1
- package/locales/global/mni.js +1 -1
- package/locales/global/mr.js +1 -1
- package/locales/global/ms-BN.js +1 -1
- package/locales/global/ms-ID.js +1 -1
- package/locales/global/ms-SG.js +1 -1
- package/locales/global/ms.js +1 -1
- package/locales/global/mt.js +1 -1
- package/locales/global/mua.js +1 -1
- package/locales/global/my.js +1 -1
- package/locales/global/mzn.js +1 -1
- package/locales/global/naq.js +1 -1
- package/locales/global/nb-SJ.js +1 -1
- package/locales/global/nb.js +1 -1
- package/locales/global/nd.js +1 -1
- package/locales/global/nds-NL.js +1 -1
- package/locales/global/nds.js +1 -1
- package/locales/global/ne-IN.js +1 -1
- package/locales/global/ne.js +1 -1
- package/locales/global/nl-AW.js +1 -1
- package/locales/global/nl-BE.js +1 -1
- package/locales/global/nl-BQ.js +1 -1
- package/locales/global/nl-CW.js +1 -1
- package/locales/global/nl-SR.js +1 -1
- package/locales/global/nl-SX.js +1 -1
- package/locales/global/nl.js +1 -1
- package/locales/global/nmg.js +1 -1
- package/locales/global/nn.js +1 -1
- package/locales/global/nnh.js +1 -1
- package/locales/global/no.js +1 -1
- package/locales/global/nus.js +1 -1
- package/locales/global/nyn.js +1 -1
- package/locales/global/om-KE.js +1 -1
- package/locales/global/om.js +1 -1
- package/locales/global/or.js +1 -1
- package/locales/global/os-RU.js +1 -1
- package/locales/global/os.js +1 -1
- package/locales/global/pa-Arab.js +1 -1
- package/locales/global/pa-Guru.js +1 -1
- package/locales/global/pa.js +1 -1
- package/locales/global/pcm.js +1 -1
- package/locales/global/pl.js +1 -1
- package/locales/global/ps-PK.js +1 -1
- package/locales/global/ps.js +1 -1
- package/locales/global/pt-AO.js +1 -1
- package/locales/global/pt-CH.js +1 -1
- package/locales/global/pt-CV.js +1 -1
- package/locales/global/pt-GQ.js +1 -1
- package/locales/global/pt-GW.js +1 -1
- package/locales/global/pt-LU.js +1 -1
- package/locales/global/pt-MO.js +1 -1
- package/locales/global/pt-MZ.js +1 -1
- package/locales/global/pt-PT.js +1 -1
- package/locales/global/pt-ST.js +1 -1
- package/locales/global/pt-TL.js +1 -1
- package/locales/global/pt.js +1 -1
- package/locales/global/qu-BO.js +1 -1
- package/locales/global/qu-EC.js +1 -1
- package/locales/global/qu.js +1 -1
- package/locales/global/rm.js +1 -1
- package/locales/global/rn.js +1 -1
- package/locales/global/ro-MD.js +1 -1
- package/locales/global/ro.js +1 -1
- package/locales/global/rof.js +1 -1
- package/locales/global/ru-BY.js +1 -1
- package/locales/global/ru-KG.js +1 -1
- package/locales/global/ru-KZ.js +1 -1
- package/locales/global/ru-MD.js +1 -1
- package/locales/global/ru-UA.js +1 -1
- package/locales/global/ru.js +1 -1
- package/locales/global/rw.js +1 -1
- package/locales/global/rwk.js +1 -1
- package/locales/global/sa.js +1 -1
- package/locales/global/sah.js +1 -1
- package/locales/global/saq.js +1 -1
- package/locales/global/sat-Olck.js +1 -1
- package/locales/global/sat.js +1 -1
- package/locales/global/sbp.js +1 -1
- package/locales/global/sc.js +1 -1
- package/locales/global/sd-Arab.js +1 -1
- package/locales/global/sd-Deva.js +1 -1
- package/locales/global/sd.js +1 -1
- package/locales/global/se-FI.js +1 -1
- package/locales/global/se-SE.js +1 -1
- package/locales/global/se.js +1 -1
- package/locales/global/seh.js +1 -1
- package/locales/global/ses.js +1 -1
- package/locales/global/sg.js +1 -1
- package/locales/global/shi-Latn.js +1 -1
- package/locales/global/shi-Tfng.js +1 -1
- package/locales/global/shi.js +1 -1
- package/locales/global/si.js +1 -1
- package/locales/global/sk.js +1 -1
- package/locales/global/sl.js +1 -1
- package/locales/global/smn.js +1 -1
- package/locales/global/sn.js +1 -1
- package/locales/global/so-DJ.js +1 -1
- package/locales/global/so-ET.js +1 -1
- package/locales/global/so-KE.js +1 -1
- package/locales/global/so.js +1 -1
- package/locales/global/sq-MK.js +1 -1
- package/locales/global/sq-XK.js +1 -1
- package/locales/global/sq.js +1 -1
- package/locales/global/sr-Cyrl-BA.js +1 -1
- package/locales/global/sr-Cyrl-ME.js +1 -1
- package/locales/global/sr-Cyrl-XK.js +1 -1
- package/locales/global/sr-Cyrl.js +1 -1
- package/locales/global/sr-Latn-BA.js +1 -1
- package/locales/global/sr-Latn-ME.js +1 -1
- package/locales/global/sr-Latn-XK.js +1 -1
- package/locales/global/sr-Latn.js +1 -1
- package/locales/global/sr.js +1 -1
- package/locales/global/su-Latn.js +1 -1
- package/locales/global/su.js +1 -1
- package/locales/global/sv-AX.js +1 -1
- package/locales/global/sv-FI.js +1 -1
- package/locales/global/sv.js +1 -1
- package/locales/global/sw-CD.js +1 -1
- package/locales/global/sw-KE.js +1 -1
- package/locales/global/sw-UG.js +1 -1
- package/locales/global/sw.js +1 -1
- package/locales/global/ta-LK.js +1 -1
- package/locales/global/ta-MY.js +1 -1
- package/locales/global/ta-SG.js +1 -1
- package/locales/global/ta.js +1 -1
- package/locales/global/te.js +1 -1
- package/locales/global/teo-KE.js +1 -1
- package/locales/global/teo.js +1 -1
- package/locales/global/tg.js +1 -1
- package/locales/global/th.js +1 -1
- package/locales/global/ti-ER.js +1 -1
- package/locales/global/ti.js +1 -1
- package/locales/global/tk.js +1 -1
- package/locales/global/to.js +1 -1
- package/locales/global/tr-CY.js +1 -1
- package/locales/global/tr.js +1 -1
- package/locales/global/tt.js +1 -1
- package/locales/global/twq.js +1 -1
- package/locales/global/tzm.js +1 -1
- package/locales/global/ug.js +1 -1
- package/locales/global/uk.js +1 -1
- package/locales/global/und.js +1 -1
- package/locales/global/ur-IN.js +1 -1
- package/locales/global/ur.js +1 -1
- package/locales/global/uz-Arab.js +1 -1
- package/locales/global/uz-Cyrl.js +1 -1
- package/locales/global/uz-Latn.js +1 -1
- package/locales/global/uz.js +1 -1
- package/locales/global/vai-Latn.js +1 -1
- package/locales/global/vai-Vaii.js +1 -1
- package/locales/global/vai.js +1 -1
- package/locales/global/vi.js +1 -1
- package/locales/global/vun.js +1 -1
- package/locales/global/wae.js +1 -1
- package/locales/global/wo.js +1 -1
- package/locales/global/xh.js +1 -1
- package/locales/global/xog.js +1 -1
- package/locales/global/yav.js +1 -1
- package/locales/global/yi.js +1 -1
- package/locales/global/yo-BJ.js +1 -1
- package/locales/global/yo.js +1 -1
- package/locales/global/yrl-CO.js +1 -1
- package/locales/global/yrl-VE.js +1 -1
- package/locales/global/yrl.js +1 -1
- package/locales/global/yue-Hans.js +1 -1
- package/locales/global/yue-Hant.js +1 -1
- package/locales/global/yue.js +1 -1
- package/locales/global/zgh.js +1 -1
- package/locales/global/zh-Hans-HK.js +1 -1
- package/locales/global/zh-Hans-MO.js +1 -1
- package/locales/global/zh-Hans-SG.js +1 -1
- package/locales/global/zh-Hans.js +1 -1
- package/locales/global/zh-Hant-HK.js +1 -1
- package/locales/global/zh-Hant-MO.js +1 -1
- package/locales/global/zh-Hant.js +1 -1
- package/locales/global/zh.js +1 -1
- package/locales/global/zu.js +1 -1
- package/locales/gsw-FR.d.ts +1 -1
- package/locales/gsw-FR.mjs +2 -2
- package/locales/gsw-LI.d.ts +1 -1
- package/locales/gsw-LI.mjs +2 -2
- package/locales/gsw.d.ts +1 -1
- package/locales/gsw.mjs +2 -2
- package/locales/gu.d.ts +1 -1
- package/locales/gu.mjs +2 -2
- package/locales/guz.d.ts +1 -1
- package/locales/guz.mjs +2 -2
- package/locales/gv.d.ts +1 -1
- package/locales/gv.mjs +2 -2
- package/locales/ha-GH.d.ts +1 -1
- package/locales/ha-GH.mjs +2 -2
- package/locales/ha-NE.d.ts +1 -1
- package/locales/ha-NE.mjs +2 -2
- package/locales/ha.d.ts +1 -1
- package/locales/ha.mjs +2 -2
- package/locales/haw.d.ts +1 -1
- package/locales/haw.mjs +2 -2
- package/locales/he.d.ts +1 -1
- package/locales/he.mjs +2 -2
- package/locales/hi-Latn.d.ts +1 -1
- package/locales/hi-Latn.mjs +2 -2
- package/locales/hi.d.ts +1 -1
- package/locales/hi.mjs +2 -2
- package/locales/hr-BA.d.ts +1 -1
- package/locales/hr-BA.mjs +2 -2
- package/locales/hr.d.ts +1 -1
- package/locales/hr.mjs +2 -2
- package/locales/hsb.d.ts +1 -1
- package/locales/hsb.mjs +2 -2
- package/locales/hu.d.ts +1 -1
- package/locales/hu.mjs +2 -2
- package/locales/hy.d.ts +1 -1
- package/locales/hy.mjs +2 -2
- package/locales/ia.d.ts +1 -1
- package/locales/ia.mjs +2 -2
- package/locales/id.d.ts +1 -1
- package/locales/id.mjs +2 -2
- package/locales/ig.d.ts +1 -1
- package/locales/ig.mjs +2 -2
- package/locales/ii.d.ts +1 -1
- package/locales/ii.mjs +2 -2
- package/locales/is.d.ts +1 -1
- package/locales/is.mjs +2 -2
- package/locales/it-CH.d.ts +1 -1
- package/locales/it-CH.mjs +2 -2
- package/locales/it-SM.d.ts +1 -1
- package/locales/it-SM.mjs +2 -2
- package/locales/it-VA.d.ts +1 -1
- package/locales/it-VA.mjs +2 -2
- package/locales/it.d.ts +1 -1
- package/locales/it.mjs +2 -2
- package/locales/ja.d.ts +1 -1
- package/locales/ja.mjs +2 -2
- package/locales/jgo.d.ts +1 -1
- package/locales/jgo.mjs +2 -2
- package/locales/jmc.d.ts +1 -1
- package/locales/jmc.mjs +2 -2
- package/locales/jv.d.ts +1 -1
- package/locales/jv.mjs +2 -2
- package/locales/ka.d.ts +1 -1
- package/locales/ka.mjs +2 -2
- package/locales/kab.d.ts +1 -1
- package/locales/kab.mjs +2 -2
- package/locales/kam.d.ts +1 -1
- package/locales/kam.mjs +2 -2
- package/locales/kde.d.ts +1 -1
- package/locales/kde.mjs +2 -2
- package/locales/kea.d.ts +1 -1
- package/locales/kea.mjs +2 -2
- package/locales/kgp.d.ts +1 -1
- package/locales/kgp.mjs +2 -2
- package/locales/khq.d.ts +1 -1
- package/locales/khq.mjs +2 -2
- package/locales/ki.d.ts +1 -1
- package/locales/ki.mjs +2 -2
- package/locales/kk.d.ts +1 -1
- package/locales/kk.mjs +2 -2
- package/locales/kkj.d.ts +1 -1
- package/locales/kkj.mjs +2 -2
- package/locales/kl.d.ts +1 -1
- package/locales/kl.mjs +2 -2
- package/locales/kln.d.ts +1 -1
- package/locales/kln.mjs +2 -2
- package/locales/km.d.ts +1 -1
- package/locales/km.mjs +2 -2
- package/locales/kn.d.ts +1 -1
- package/locales/kn.mjs +2 -2
- package/locales/ko-KP.d.ts +1 -1
- package/locales/ko-KP.mjs +2 -2
- package/locales/ko.d.ts +1 -1
- package/locales/ko.mjs +2 -2
- package/locales/kok.d.ts +1 -1
- package/locales/kok.mjs +2 -2
- package/locales/ks-Arab.d.ts +1 -1
- package/locales/ks-Arab.mjs +2 -2
- package/locales/ks-Deva.d.ts +1 -1
- package/locales/ks-Deva.mjs +2 -2
- package/locales/ks.d.ts +1 -1
- package/locales/ks.mjs +2 -2
- package/locales/ksb.d.ts +1 -1
- package/locales/ksb.mjs +2 -2
- package/locales/ksf.d.ts +1 -1
- package/locales/ksf.mjs +2 -2
- package/locales/ksh.d.ts +1 -1
- package/locales/ksh.mjs +2 -2
- package/locales/ku.d.ts +1 -1
- package/locales/ku.mjs +2 -2
- package/locales/kw.d.ts +1 -1
- package/locales/kw.mjs +2 -2
- package/locales/ky.d.ts +1 -1
- package/locales/ky.mjs +2 -2
- package/locales/lag.d.ts +1 -1
- package/locales/lag.mjs +2 -2
- package/locales/lb.d.ts +1 -1
- package/locales/lb.mjs +2 -2
- package/locales/lg.d.ts +1 -1
- package/locales/lg.mjs +2 -2
- package/locales/lkt.d.ts +1 -1
- package/locales/lkt.mjs +2 -2
- package/locales/ln-AO.d.ts +1 -1
- package/locales/ln-AO.mjs +2 -2
- package/locales/ln-CF.d.ts +1 -1
- package/locales/ln-CF.mjs +2 -2
- package/locales/ln-CG.d.ts +1 -1
- package/locales/ln-CG.mjs +2 -2
- package/locales/ln.d.ts +1 -1
- package/locales/ln.mjs +2 -2
- package/locales/lo.d.ts +1 -1
- package/locales/lo.mjs +2 -2
- package/locales/lrc-IQ.d.ts +1 -1
- package/locales/lrc-IQ.mjs +2 -2
- package/locales/lrc.d.ts +1 -1
- package/locales/lrc.mjs +2 -2
- package/locales/lt.d.ts +1 -1
- package/locales/lt.mjs +2 -2
- package/locales/lu.d.ts +1 -1
- package/locales/lu.mjs +2 -2
- package/locales/luo.d.ts +1 -1
- package/locales/luo.mjs +2 -2
- package/locales/luy.d.ts +1 -1
- package/locales/luy.mjs +2 -2
- package/locales/lv.d.ts +1 -1
- package/locales/lv.mjs +2 -2
- package/locales/mai.d.ts +1 -1
- package/locales/mai.mjs +2 -2
- package/locales/mas-TZ.d.ts +1 -1
- package/locales/mas-TZ.mjs +2 -2
- package/locales/mas.d.ts +1 -1
- package/locales/mas.mjs +2 -2
- package/locales/mer.d.ts +1 -1
- package/locales/mer.mjs +2 -2
- package/locales/mfe.d.ts +1 -1
- package/locales/mfe.mjs +2 -2
- package/locales/mg.d.ts +1 -1
- package/locales/mg.mjs +2 -2
- package/locales/mgh.d.ts +1 -1
- package/locales/mgh.mjs +2 -2
- package/locales/mgo.d.ts +1 -1
- package/locales/mgo.mjs +2 -2
- package/locales/mi.d.ts +1 -1
- package/locales/mi.mjs +2 -2
- package/locales/mk.d.ts +1 -1
- package/locales/mk.mjs +2 -2
- package/locales/ml.d.ts +1 -1
- package/locales/ml.mjs +2 -2
- package/locales/mn.d.ts +1 -1
- package/locales/mn.mjs +2 -2
- package/locales/mni-Beng.d.ts +1 -1
- package/locales/mni-Beng.mjs +2 -2
- package/locales/mni.d.ts +1 -1
- package/locales/mni.mjs +2 -2
- package/locales/mr.d.ts +1 -1
- package/locales/mr.mjs +2 -2
- package/locales/ms-BN.d.ts +1 -1
- package/locales/ms-BN.mjs +2 -2
- package/locales/ms-ID.d.ts +1 -1
- package/locales/ms-ID.mjs +2 -2
- package/locales/ms-SG.d.ts +1 -1
- package/locales/ms-SG.mjs +2 -2
- package/locales/ms.d.ts +1 -1
- package/locales/ms.mjs +2 -2
- package/locales/mt.d.ts +1 -1
- package/locales/mt.mjs +2 -2
- package/locales/mua.d.ts +1 -1
- package/locales/mua.mjs +2 -2
- package/locales/my.d.ts +1 -1
- package/locales/my.mjs +2 -2
- package/locales/mzn.d.ts +1 -1
- package/locales/mzn.mjs +2 -2
- package/locales/naq.d.ts +1 -1
- package/locales/naq.mjs +2 -2
- package/locales/nb-SJ.d.ts +1 -1
- package/locales/nb-SJ.mjs +2 -2
- package/locales/nb.d.ts +1 -1
- package/locales/nb.mjs +2 -2
- package/locales/nd.d.ts +1 -1
- package/locales/nd.mjs +2 -2
- package/locales/nds-NL.d.ts +1 -1
- package/locales/nds-NL.mjs +2 -2
- package/locales/nds.d.ts +1 -1
- package/locales/nds.mjs +2 -2
- package/locales/ne-IN.d.ts +1 -1
- package/locales/ne-IN.mjs +2 -2
- package/locales/ne.d.ts +1 -1
- package/locales/ne.mjs +2 -2
- package/locales/nl-AW.d.ts +1 -1
- package/locales/nl-AW.mjs +2 -2
- package/locales/nl-BE.d.ts +1 -1
- package/locales/nl-BE.mjs +2 -2
- package/locales/nl-BQ.d.ts +1 -1
- package/locales/nl-BQ.mjs +2 -2
- package/locales/nl-CW.d.ts +1 -1
- package/locales/nl-CW.mjs +2 -2
- package/locales/nl-SR.d.ts +1 -1
- package/locales/nl-SR.mjs +2 -2
- package/locales/nl-SX.d.ts +1 -1
- package/locales/nl-SX.mjs +2 -2
- package/locales/nl.d.ts +1 -1
- package/locales/nl.mjs +2 -2
- package/locales/nmg.d.ts +1 -1
- package/locales/nmg.mjs +2 -2
- package/locales/nn.d.ts +1 -1
- package/locales/nn.mjs +2 -2
- package/locales/nnh.d.ts +1 -1
- package/locales/nnh.mjs +2 -2
- package/locales/no.d.ts +1 -1
- package/locales/no.mjs +2 -2
- package/locales/nus.d.ts +1 -1
- package/locales/nus.mjs +2 -2
- package/locales/nyn.d.ts +1 -1
- package/locales/nyn.mjs +2 -2
- package/locales/om-KE.d.ts +1 -1
- package/locales/om-KE.mjs +2 -2
- package/locales/om.d.ts +1 -1
- package/locales/om.mjs +2 -2
- package/locales/or.d.ts +1 -1
- package/locales/or.mjs +2 -2
- package/locales/os-RU.d.ts +1 -1
- package/locales/os-RU.mjs +2 -2
- package/locales/os.d.ts +1 -1
- package/locales/os.mjs +2 -2
- package/locales/pa-Arab.d.ts +1 -1
- package/locales/pa-Arab.mjs +2 -2
- package/locales/pa-Guru.d.ts +1 -1
- package/locales/pa-Guru.mjs +2 -2
- package/locales/pa.d.ts +1 -1
- package/locales/pa.mjs +2 -2
- package/locales/pcm.d.ts +1 -1
- package/locales/pcm.mjs +2 -2
- package/locales/pl.d.ts +1 -1
- package/locales/pl.mjs +2 -2
- package/locales/ps-PK.d.ts +1 -1
- package/locales/ps-PK.mjs +2 -2
- package/locales/ps.d.ts +1 -1
- package/locales/ps.mjs +2 -2
- package/locales/pt-AO.d.ts +1 -1
- package/locales/pt-AO.mjs +2 -2
- package/locales/pt-CH.d.ts +1 -1
- package/locales/pt-CH.mjs +2 -2
- package/locales/pt-CV.d.ts +1 -1
- package/locales/pt-CV.mjs +2 -2
- package/locales/pt-GQ.d.ts +1 -1
- package/locales/pt-GQ.mjs +2 -2
- package/locales/pt-GW.d.ts +1 -1
- package/locales/pt-GW.mjs +2 -2
- package/locales/pt-LU.d.ts +1 -1
- package/locales/pt-LU.mjs +2 -2
- package/locales/pt-MO.d.ts +1 -1
- package/locales/pt-MO.mjs +2 -2
- package/locales/pt-MZ.d.ts +1 -1
- package/locales/pt-MZ.mjs +2 -2
- package/locales/pt-PT.d.ts +1 -1
- package/locales/pt-PT.mjs +2 -2
- package/locales/pt-ST.d.ts +1 -1
- package/locales/pt-ST.mjs +2 -2
- package/locales/pt-TL.d.ts +1 -1
- package/locales/pt-TL.mjs +2 -2
- package/locales/pt.d.ts +1 -1
- package/locales/pt.mjs +2 -2
- package/locales/qu-BO.d.ts +1 -1
- package/locales/qu-BO.mjs +2 -2
- package/locales/qu-EC.d.ts +1 -1
- package/locales/qu-EC.mjs +2 -2
- package/locales/qu.d.ts +1 -1
- package/locales/qu.mjs +2 -2
- package/locales/rm.d.ts +1 -1
- package/locales/rm.mjs +2 -2
- package/locales/rn.d.ts +1 -1
- package/locales/rn.mjs +2 -2
- package/locales/ro-MD.d.ts +1 -1
- package/locales/ro-MD.mjs +2 -2
- package/locales/ro.d.ts +1 -1
- package/locales/ro.mjs +2 -2
- package/locales/rof.d.ts +1 -1
- package/locales/rof.mjs +2 -2
- package/locales/ru-BY.d.ts +1 -1
- package/locales/ru-BY.mjs +2 -2
- package/locales/ru-KG.d.ts +1 -1
- package/locales/ru-KG.mjs +2 -2
- package/locales/ru-KZ.d.ts +1 -1
- package/locales/ru-KZ.mjs +2 -2
- package/locales/ru-MD.d.ts +1 -1
- package/locales/ru-MD.mjs +2 -2
- package/locales/ru-UA.d.ts +1 -1
- package/locales/ru-UA.mjs +2 -2
- package/locales/ru.d.ts +1 -1
- package/locales/ru.mjs +2 -2
- package/locales/rw.d.ts +1 -1
- package/locales/rw.mjs +2 -2
- package/locales/rwk.d.ts +1 -1
- package/locales/rwk.mjs +2 -2
- package/locales/sa.d.ts +1 -1
- package/locales/sa.mjs +2 -2
- package/locales/sah.d.ts +1 -1
- package/locales/sah.mjs +2 -2
- package/locales/saq.d.ts +1 -1
- package/locales/saq.mjs +2 -2
- package/locales/sat-Olck.d.ts +1 -1
- package/locales/sat-Olck.mjs +2 -2
- package/locales/sat.d.ts +1 -1
- package/locales/sat.mjs +2 -2
- package/locales/sbp.d.ts +1 -1
- package/locales/sbp.mjs +2 -2
- package/locales/sc.d.ts +1 -1
- package/locales/sc.mjs +2 -2
- package/locales/sd-Arab.d.ts +1 -1
- package/locales/sd-Arab.mjs +2 -2
- package/locales/sd-Deva.d.ts +1 -1
- package/locales/sd-Deva.mjs +2 -2
- package/locales/sd.d.ts +1 -1
- package/locales/sd.mjs +2 -2
- package/locales/se-FI.d.ts +1 -1
- package/locales/se-FI.mjs +2 -2
- package/locales/se-SE.d.ts +1 -1
- package/locales/se-SE.mjs +2 -2
- package/locales/se.d.ts +1 -1
- package/locales/se.mjs +2 -2
- package/locales/seh.d.ts +1 -1
- package/locales/seh.mjs +2 -2
- package/locales/ses.d.ts +1 -1
- package/locales/ses.mjs +2 -2
- package/locales/sg.d.ts +1 -1
- package/locales/sg.mjs +2 -2
- package/locales/shi-Latn.d.ts +1 -1
- package/locales/shi-Latn.mjs +2 -2
- package/locales/shi-Tfng.d.ts +1 -1
- package/locales/shi-Tfng.mjs +2 -2
- package/locales/shi.d.ts +1 -1
- package/locales/shi.mjs +2 -2
- package/locales/si.d.ts +1 -1
- package/locales/si.mjs +2 -2
- package/locales/sk.d.ts +1 -1
- package/locales/sk.mjs +2 -2
- package/locales/sl.d.ts +1 -1
- package/locales/sl.mjs +2 -2
- package/locales/smn.d.ts +1 -1
- package/locales/smn.mjs +2 -2
- package/locales/sn.d.ts +1 -1
- package/locales/sn.mjs +2 -2
- package/locales/so-DJ.d.ts +1 -1
- package/locales/so-DJ.mjs +2 -2
- package/locales/so-ET.d.ts +1 -1
- package/locales/so-ET.mjs +2 -2
- package/locales/so-KE.d.ts +1 -1
- package/locales/so-KE.mjs +2 -2
- package/locales/so.d.ts +1 -1
- package/locales/so.mjs +2 -2
- package/locales/sq-MK.d.ts +1 -1
- package/locales/sq-MK.mjs +2 -2
- package/locales/sq-XK.d.ts +1 -1
- package/locales/sq-XK.mjs +2 -2
- package/locales/sq.d.ts +1 -1
- package/locales/sq.mjs +2 -2
- package/locales/sr-Cyrl-BA.d.ts +1 -1
- package/locales/sr-Cyrl-BA.mjs +2 -2
- package/locales/sr-Cyrl-ME.d.ts +1 -1
- package/locales/sr-Cyrl-ME.mjs +2 -2
- package/locales/sr-Cyrl-XK.d.ts +1 -1
- package/locales/sr-Cyrl-XK.mjs +2 -2
- package/locales/sr-Cyrl.d.ts +1 -1
- package/locales/sr-Cyrl.mjs +2 -2
- package/locales/sr-Latn-BA.d.ts +1 -1
- package/locales/sr-Latn-BA.mjs +2 -2
- package/locales/sr-Latn-ME.d.ts +1 -1
- package/locales/sr-Latn-ME.mjs +2 -2
- package/locales/sr-Latn-XK.d.ts +1 -1
- package/locales/sr-Latn-XK.mjs +2 -2
- package/locales/sr-Latn.d.ts +1 -1
- package/locales/sr-Latn.mjs +2 -2
- package/locales/sr.d.ts +1 -1
- package/locales/sr.mjs +2 -2
- package/locales/su-Latn.d.ts +1 -1
- package/locales/su-Latn.mjs +2 -2
- package/locales/su.d.ts +1 -1
- package/locales/su.mjs +2 -2
- package/locales/sv-AX.d.ts +1 -1
- package/locales/sv-AX.mjs +2 -2
- package/locales/sv-FI.d.ts +1 -1
- package/locales/sv-FI.mjs +2 -2
- package/locales/sv.d.ts +1 -1
- package/locales/sv.mjs +2 -2
- package/locales/sw-CD.d.ts +1 -1
- package/locales/sw-CD.mjs +2 -2
- package/locales/sw-KE.d.ts +1 -1
- package/locales/sw-KE.mjs +2 -2
- package/locales/sw-UG.d.ts +1 -1
- package/locales/sw-UG.mjs +2 -2
- package/locales/sw.d.ts +1 -1
- package/locales/sw.mjs +2 -2
- package/locales/ta-LK.d.ts +1 -1
- package/locales/ta-LK.mjs +2 -2
- package/locales/ta-MY.d.ts +1 -1
- package/locales/ta-MY.mjs +2 -2
- package/locales/ta-SG.d.ts +1 -1
- package/locales/ta-SG.mjs +2 -2
- package/locales/ta.d.ts +1 -1
- package/locales/ta.mjs +2 -2
- package/locales/te.d.ts +1 -1
- package/locales/te.mjs +2 -2
- package/locales/teo-KE.d.ts +1 -1
- package/locales/teo-KE.mjs +2 -2
- package/locales/teo.d.ts +1 -1
- package/locales/teo.mjs +2 -2
- package/locales/tg.d.ts +1 -1
- package/locales/tg.mjs +2 -2
- package/locales/th.d.ts +1 -1
- package/locales/th.mjs +2 -2
- package/locales/ti-ER.d.ts +1 -1
- package/locales/ti-ER.mjs +2 -2
- package/locales/ti.d.ts +1 -1
- package/locales/ti.mjs +2 -2
- package/locales/tk.d.ts +1 -1
- package/locales/tk.mjs +2 -2
- package/locales/to.d.ts +1 -1
- package/locales/to.mjs +2 -2
- package/locales/tr-CY.d.ts +1 -1
- package/locales/tr-CY.mjs +2 -2
- package/locales/tr.d.ts +1 -1
- package/locales/tr.mjs +2 -2
- package/locales/tt.d.ts +1 -1
- package/locales/tt.mjs +2 -2
- package/locales/twq.d.ts +1 -1
- package/locales/twq.mjs +2 -2
- package/locales/tzm.d.ts +1 -1
- package/locales/tzm.mjs +2 -2
- package/locales/ug.d.ts +1 -1
- package/locales/ug.mjs +2 -2
- package/locales/uk.d.ts +1 -1
- package/locales/uk.mjs +2 -2
- package/locales/und.d.ts +1 -1
- package/locales/und.mjs +2 -2
- package/locales/ur-IN.d.ts +1 -1
- package/locales/ur-IN.mjs +2 -2
- package/locales/ur.d.ts +1 -1
- package/locales/ur.mjs +2 -2
- package/locales/uz-Arab.d.ts +1 -1
- package/locales/uz-Arab.mjs +2 -2
- package/locales/uz-Cyrl.d.ts +1 -1
- package/locales/uz-Cyrl.mjs +2 -2
- package/locales/uz-Latn.d.ts +1 -1
- package/locales/uz-Latn.mjs +2 -2
- package/locales/uz.d.ts +1 -1
- package/locales/uz.mjs +2 -2
- package/locales/vai-Latn.d.ts +1 -1
- package/locales/vai-Latn.mjs +2 -2
- package/locales/vai-Vaii.d.ts +1 -1
- package/locales/vai-Vaii.mjs +2 -2
- package/locales/vai.d.ts +1 -1
- package/locales/vai.mjs +2 -2
- package/locales/vi.d.ts +1 -1
- package/locales/vi.mjs +2 -2
- package/locales/vun.d.ts +1 -1
- package/locales/vun.mjs +2 -2
- package/locales/wae.d.ts +1 -1
- package/locales/wae.mjs +2 -2
- package/locales/wo.d.ts +1 -1
- package/locales/wo.mjs +2 -2
- package/locales/xh.d.ts +1 -1
- package/locales/xh.mjs +2 -2
- package/locales/xog.d.ts +1 -1
- package/locales/xog.mjs +2 -2
- package/locales/yav.d.ts +1 -1
- package/locales/yav.mjs +2 -2
- package/locales/yi.d.ts +1 -1
- package/locales/yi.mjs +2 -2
- package/locales/yo-BJ.d.ts +1 -1
- package/locales/yo-BJ.mjs +2 -2
- package/locales/yo.d.ts +1 -1
- package/locales/yo.mjs +2 -2
- package/locales/yrl-CO.d.ts +1 -1
- package/locales/yrl-CO.mjs +2 -2
- package/locales/yrl-VE.d.ts +1 -1
- package/locales/yrl-VE.mjs +2 -2
- package/locales/yrl.d.ts +1 -1
- package/locales/yrl.mjs +2 -2
- package/locales/yue-Hans.d.ts +1 -1
- package/locales/yue-Hans.mjs +2 -2
- package/locales/yue-Hant.d.ts +1 -1
- package/locales/yue-Hant.mjs +2 -2
- package/locales/yue.d.ts +1 -1
- package/locales/yue.mjs +2 -2
- package/locales/zgh.d.ts +1 -1
- package/locales/zgh.mjs +2 -2
- package/locales/zh-Hans-HK.d.ts +1 -1
- package/locales/zh-Hans-HK.mjs +2 -2
- package/locales/zh-Hans-MO.d.ts +1 -1
- package/locales/zh-Hans-MO.mjs +2 -2
- package/locales/zh-Hans-SG.d.ts +1 -1
- package/locales/zh-Hans-SG.mjs +2 -2
- package/locales/zh-Hans.d.ts +1 -1
- package/locales/zh-Hans.mjs +2 -2
- package/locales/zh-Hant-HK.d.ts +1 -1
- package/locales/zh-Hant-HK.mjs +2 -2
- package/locales/zh-Hant-MO.d.ts +1 -1
- package/locales/zh-Hant-MO.mjs +2 -2
- package/locales/zh-Hant.d.ts +1 -1
- package/locales/zh-Hant.mjs +2 -2
- package/locales/zh.d.ts +1 -1
- package/locales/zh.mjs +2 -2
- package/locales/zu.d.ts +1 -1
- package/locales/zu.mjs +2 -2
- package/package.json +2 -2
- package/testing/index.d.ts +1 -1
- package/upgrade/index.d.ts +1 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright Google LLC All Rights Reserved.
|
|
4
4
|
*
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.
|
|
6
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
7
7
|
*/
|
|
8
8
|
import { booleanAttribute, Directive, ElementRef, inject, Injector, Input, NgZone, numberAttribute, PLATFORM_ID, Renderer2, ɵformatRuntimeError as formatRuntimeError, ɵIMAGE_CONFIG as IMAGE_CONFIG, ɵIMAGE_CONFIG_DEFAULTS as IMAGE_CONFIG_DEFAULTS, ɵperformanceMarkFeature as performanceMarkFeature, ɵRuntimeError as RuntimeError, ɵunwrapSafeValue as unwrapSafeValue, ChangeDetectorRef, ApplicationRef, ɵwhenStable as whenStable, } from '@angular/core';
|
|
9
9
|
import { isPlatformServer } from '../../platform_id';
|
|
@@ -492,6 +492,7 @@ export class NgOptimizedImage {
|
|
|
492
492
|
};
|
|
493
493
|
const removeLoadListenerFn = this.renderer.listen(img, 'load', callback);
|
|
494
494
|
const removeErrorListenerFn = this.renderer.listen(img, 'error', callback);
|
|
495
|
+
callOnLoadIfImageIsLoaded(img, callback);
|
|
495
496
|
}
|
|
496
497
|
/** @nodoc */
|
|
497
498
|
ngOnDestroy() {
|
|
@@ -504,10 +505,10 @@ export class NgOptimizedImage {
|
|
|
504
505
|
setHostAttribute(name, value) {
|
|
505
506
|
this.renderer.setAttribute(this.imgElement, name, value);
|
|
506
507
|
}
|
|
507
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
508
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.
|
|
508
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NgOptimizedImage, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
509
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.7", type: NgOptimizedImage, isStandalone: true, selector: "img[ngSrc]", inputs: { ngSrc: ["ngSrc", "ngSrc", unwrapSafeUrl], ngSrcset: "ngSrcset", sizes: "sizes", width: ["width", "width", numberAttribute], height: ["height", "height", numberAttribute], loading: "loading", priority: ["priority", "priority", booleanAttribute], loaderParams: "loaderParams", disableOptimizedSrcset: ["disableOptimizedSrcset", "disableOptimizedSrcset", booleanAttribute], fill: ["fill", "fill", booleanAttribute], placeholder: ["placeholder", "placeholder", booleanOrUrlAttribute], placeholderConfig: "placeholderConfig", src: "src", srcset: "srcset" }, host: { properties: { "style.position": "fill ? \"absolute\" : null", "style.width": "fill ? \"100%\" : null", "style.height": "fill ? \"100%\" : null", "style.inset": "fill ? \"0\" : null", "style.background-size": "placeholder ? \"cover\" : null", "style.background-position": "placeholder ? \"50% 50%\" : null", "style.background-repeat": "placeholder ? \"no-repeat\" : null", "style.background-image": "placeholder ? generatePlaceholder(placeholder) : null", "style.filter": "placeholder && shouldBlurPlaceholder(placeholderConfig) ? \"blur(15px)\" : null" } }, usesOnChanges: true, ngImport: i0 }); }
|
|
509
510
|
}
|
|
510
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
511
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NgOptimizedImage, decorators: [{
|
|
511
512
|
type: Directive,
|
|
512
513
|
args: [{
|
|
513
514
|
standalone: true,
|
|
@@ -781,7 +782,7 @@ function assertGreaterThanZero(dir, inputValue, inputName) {
|
|
|
781
782
|
* - Whether image styling is "correct" (see below for a longer explanation).
|
|
782
783
|
*/
|
|
783
784
|
function assertNoImageDistortion(dir, img, renderer) {
|
|
784
|
-
const
|
|
785
|
+
const callback = () => {
|
|
785
786
|
removeLoadListenerFn();
|
|
786
787
|
removeErrorListenerFn();
|
|
787
788
|
const computedStyle = window.getComputedStyle(img);
|
|
@@ -849,7 +850,8 @@ function assertNoImageDistortion(dir, img, renderer) {
|
|
|
849
850
|
`or consider using the "ngSrcset" and "sizes" attributes.`));
|
|
850
851
|
}
|
|
851
852
|
}
|
|
852
|
-
}
|
|
853
|
+
};
|
|
854
|
+
const removeLoadListenerFn = renderer.listen(img, 'load', callback);
|
|
853
855
|
// We only listen to the `error` event to remove the `load` event listener because it will not be
|
|
854
856
|
// fired if the image fails to load. This is done to prevent memory leaks in development mode
|
|
855
857
|
// because image elements aren't garbage-collected properly. It happens because zone.js stores the
|
|
@@ -858,6 +860,7 @@ function assertNoImageDistortion(dir, img, renderer) {
|
|
|
858
860
|
removeLoadListenerFn();
|
|
859
861
|
removeErrorListenerFn();
|
|
860
862
|
});
|
|
863
|
+
callOnLoadIfImageIsLoaded(img, callback);
|
|
861
864
|
}
|
|
862
865
|
/**
|
|
863
866
|
* Verifies that a specified input is set.
|
|
@@ -892,7 +895,7 @@ function assertEmptyWidthAndHeight(dir) {
|
|
|
892
895
|
* guidance that this can be caused by the containing element's CSS position property.
|
|
893
896
|
*/
|
|
894
897
|
function assertNonZeroRenderedHeight(dir, img, renderer) {
|
|
895
|
-
const
|
|
898
|
+
const callback = () => {
|
|
896
899
|
removeLoadListenerFn();
|
|
897
900
|
removeErrorListenerFn();
|
|
898
901
|
const renderedHeight = img.clientHeight;
|
|
@@ -903,12 +906,14 @@ function assertNonZeroRenderedHeight(dir, img, renderer) {
|
|
|
903
906
|
`To fix this problem, make sure the container element has the CSS 'position' ` +
|
|
904
907
|
`property defined and the height of the element is not zero.`));
|
|
905
908
|
}
|
|
906
|
-
}
|
|
909
|
+
};
|
|
910
|
+
const removeLoadListenerFn = renderer.listen(img, 'load', callback);
|
|
907
911
|
// See comments in the `assertNoImageDistortion`.
|
|
908
912
|
const removeErrorListenerFn = renderer.listen(img, 'error', () => {
|
|
909
913
|
removeLoadListenerFn();
|
|
910
914
|
removeErrorListenerFn();
|
|
911
915
|
});
|
|
916
|
+
callOnLoadIfImageIsLoaded(img, callback);
|
|
912
917
|
}
|
|
913
918
|
/**
|
|
914
919
|
* Verifies that the `loading` attribute is set to a valid input &
|
|
@@ -1013,6 +1018,21 @@ function assertPlaceholderDimensions(dir, imgElement) {
|
|
|
1013
1018
|
`To fix this, use a smaller image as a placeholder.`));
|
|
1014
1019
|
}
|
|
1015
1020
|
}
|
|
1021
|
+
function callOnLoadIfImageIsLoaded(img, callback) {
|
|
1022
|
+
// https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-complete
|
|
1023
|
+
// The spec defines that `complete` is truthy once its request state is fully available.
|
|
1024
|
+
// The image may already be available if it’s loaded from the browser cache.
|
|
1025
|
+
// In that case, the `load` event will not fire at all, meaning that all setup
|
|
1026
|
+
// callbacks listening for the `load` event will not be invoked.
|
|
1027
|
+
// In Safari, there is a known behavior where the `complete` property of an
|
|
1028
|
+
// `HTMLImageElement` may sometimes return `true` even when the image is not fully loaded.
|
|
1029
|
+
// Checking both `img.complete` and `img.naturalWidth` is the most reliable way to
|
|
1030
|
+
// determine if an image has been fully loaded, especially in browsers where the
|
|
1031
|
+
// `complete` property may return `true` prematurely.
|
|
1032
|
+
if (img.complete && img.naturalWidth) {
|
|
1033
|
+
callback();
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1016
1036
|
function round(input) {
|
|
1017
1037
|
return Number.isInteger(input) ? input : input.toFixed(2);
|
|
1018
1038
|
}
|
|
@@ -1032,4 +1052,4 @@ export function booleanOrUrlAttribute(value) {
|
|
|
1032
1052
|
}
|
|
1033
1053
|
return booleanAttribute(value);
|
|
1034
1054
|
}
|
|
1035
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdfb3B0aW1pemVkX2ltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9kaXJlY3RpdmVzL25nX29wdGltaXplZF9pbWFnZS9uZ19vcHRpbWl6ZWRfaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixlQUFlLEVBSWYsV0FBVyxFQUNYLFNBQVMsRUFFVCxtQkFBbUIsSUFBSSxrQkFBa0IsRUFDekMsYUFBYSxJQUFJLFlBQVksRUFDN0Isc0JBQXNCLElBQUkscUJBQXFCLEVBRS9DLHVCQUF1QixJQUFJLHNCQUFzQixFQUNqRCxhQUFhLElBQUksWUFBWSxFQUU3QixnQkFBZ0IsSUFBSSxlQUFlLEVBQ25DLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsV0FBVyxJQUFJLFVBQVUsR0FDMUIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUNMLFlBQVksRUFHWixlQUFlLEdBQ2hCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9B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S0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxnR0FBZ0c7QUFDaEcseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUF1QjtJQUMzRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssTUFBTSxJQUFJLEtBQUssS0FBSyxPQUFPLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3ZGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUExBVEZPUk1fSUQsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgybVmb3JtYXRSdW50aW1lRXJyb3IgYXMgZm9ybWF0UnVudGltZUVycm9yLFxuICDJtUlNQUdFX0NPTkZJRyBhcyBJTUFHRV9DT05GSUcsXG4gIMm1SU1BR0VfQ09ORklHX0RFRkFVTFRTIGFzIElNQUdFX0NPTkZJR19ERUZBVUxUUyxcbiAgybVJbWFnZUNvbmZpZyBhcyBJbWFnZUNvbmZpZyxcbiAgybVwZXJmb3JtYW5jZU1hcmtGZWF0dXJlIGFzIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUsXG4gIMm1UnVudGltZUVycm9yIGFzIFJ1bnRpbWVFcnJvcixcbiAgybVTYWZlVmFsdWUgYXMgU2FmZVZhbHVlLFxuICDJtXVud3JhcFNhZmVWYWx1ZSBhcyB1bndyYXBTYWZlVmFsdWUsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBBcHBsaWNhdGlvblJlZixcbiAgybV3aGVuU3RhYmxlIGFzIHdoZW5TdGFibGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1J1bnRpbWVFcnJvckNvZGV9IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5pbXBvcnQge2lzUGxhdGZvcm1TZXJ2ZXJ9IGZyb20gJy4uLy4uL3BsYXRmb3JtX2lkJztcblxuaW1wb3J0IHtpbWdEaXJlY3RpdmVEZXRhaWxzfSBmcm9tICcuL2Vycm9yX2hlbHBlcic7XG5pbXBvcnQge2Nsb3VkaW5hcnlMb2FkZXJJbmZvfSBmcm9tICcuL2ltYWdlX2xvYWRlcnMvY2xvdWRpbmFyeV9sb2FkZXInO1xuaW1wb3J0IHtcbiAgSU1BR0VfTE9BREVSLFxuICBJbWFnZUxvYWRlcixcbiAgSW1hZ2VMb2FkZXJDb25maWcsXG4gIG5vb3BJbWFnZUxvYWRlcixcbn0gZnJvbSAnLi9pbWFnZV9sb2FkZXJzL2ltYWdlX2xvYWRlcic7XG5pbXBvcnQge2ltYWdlS2l0TG9hZGVySW5mb30gZnJvbSAnLi9pbWFnZV9sb2FkZXJzL2ltYWdla2l0X2xvYWRlcic7XG5pbXBvcnQge2ltZ2l4TG9hZGVySW5mb30gZnJvbSAnLi9pbWFnZV9sb2FkZXJzL2ltZ2l4X2xvYWRlcic7XG5pbXBvcnQge25ldGxpZnlMb2FkZXJJbmZvfSBmcm9tICcuL2ltYWdlX2xvYWRlcnMvbmV0bGlmeV9sb2FkZXInO1xuaW1wb3J0IHtMQ1BJbWFnZU9ic2VydmVyfSBmcm9tICcuL2xjcF9pbWFnZV9vYnNlcnZlcic7XG5pbXBvcnQge1ByZWNvbm5lY3RMaW5rQ2hlY2tlcn0gZnJvbSAnLi9wcmVjb25uZWN0X2xpbmtfY2hlY2tlcic7XG5pbXBvcnQge1ByZWxvYWRMaW5rQ3JlYXRvcn0gZnJvbSAnLi9wcmVsb2FkLWxpbmstY3JlYXRvcic7XG5cbi8qKlxuICogV2hlbiBhIEJhc2U2NC1lbmNvZGVkIGltYWdlIGlzIHBhc3NlZCBhcyBhbiBpbnB1dCB0byB0aGUgYE5nT3B0aW1pemVkSW1hZ2VgIGRpcmVjdGl2ZSxcbiAqIGFuIGVycm9yIGlzIHRocm93bi4gVGhlIGltYWdlIGNvbnRlbnQgKGFzIGEgc3RyaW5nKSBtaWdodCBiZSB2ZXJ5IGxvbmcsIHRodXMgbWFraW5nXG4gKiBpdCBoYXJkIHRvIHJlYWQgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgZW50aXJlIHN0cmluZyBpcyBpbmNsdWRlZC4gVGhpcyBjb25zdCBkZWZpbmVzXG4gKiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW50byB0aGUgZXJyb3IgbWVzc2FnZS4gVGhlIHJlc3RcbiAqIG9mIHRoZSBjb250ZW50IGlzIHRydW5jYXRlZC5cbiAqL1xuY29uc3QgQkFTRTY0X0lNR19NQVhfTEVOR1RIX0lOX0VSUk9SID0gNTA7XG5cbi8qKlxuICogUmVnRXhwciB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNyYyBpbiBhIHNyY3NldCBpcyB1c2luZyB3aWR0aCBkZXNjcmlwdG9ycy5cbiAqIFNob3VsZCBtYXRjaCBzb21ldGhpbmcgbGlrZTogXCIxMDB3LCAyMDB3XCIuXG4gKi9cbmNvbnN0IFZBTElEX1dJRFRIX0RFU0NSSVBUT1JfU1JDU0VUID0gL14oKFxccypcXGQrd1xccyooLHwkKSl7MSx9KSQvO1xuXG4vKipcbiAqIFJlZ0V4cHIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBzcmMgaW4gYSBzcmNzZXQgaXMgdXNpbmcgZGVuc2l0eSBkZXNjcmlwdG9ycy5cbiAqIFNob3VsZCBtYXRjaCBzb21ldGhpbmcgbGlrZTogXCIxeCwgMngsIDUweFwiLiBBbHNvIHN1cHBvcnRzIGRlY2ltYWxzIGxpa2UgXCIxLjV4LCAxLjUweFwiLlxuICovXG5jb25zdCBWQUxJRF9ERU5TSVRZX0RFU0NSSVBUT1JfU1JDU0VUID0gL14oKFxccypcXGQrKFxcLlxcZCspP3hcXHMqKCx8JCkpezEsfSkkLztcblxuLyoqXG4gKiBTcmNzZXQgdmFsdWVzIHdpdGggYSBkZW5zaXR5IGRlc2NyaXB0b3IgaGlnaGVyIHRoYW4gdGhpcyB2YWx1ZSB3aWxsIGFjdGl2ZWx5XG4gKiB0aHJvdyBhbiBlcnJvci4gU3VjaCBkZW5zaXRpZXMgYXJlIG5vdCBwZXJtaXR0ZWQgYXMgdGhleSBjYXVzZSBpbWFnZSBzaXplc1xuICogdG8gYmUgdW5yZWFzb25hYmx5IGxhcmdlIGFuZCBzbG93IGRvd24gTENQLlxuICovXG5leHBvcnQgY29uc3QgQUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQID0gMztcblxuLyoqXG4gKiBVc2VkIG9ubHkgaW4gZXJyb3IgbWVzc2FnZSB0ZXh0IHRvIGNvbW11bmljYXRlIGJlc3QgcHJhY3RpY2VzLCBhcyB3ZSB3aWxsXG4gKiBvbmx5IHRocm93IGJhc2VkIG9uIHRoZSBzbGlnaHRseSBtb3JlIGNvbnNlcnZhdGl2ZSBBQlNPTFVURV9TUkNTRVRfREVOU0lUWV9DQVAuXG4gKi9cbmV4cG9ydCBjb25zdCBSRUNPTU1FTkRFRF9TUkNTRVRfREVOU0lUWV9DQVAgPSAyO1xuXG4vKipcbiAqIFVzZWQgaW4gZ2VuZXJhdGluZyBhdXRvbWF0aWMgZGVuc2l0eS1iYXNlZCBzcmNzZXRzXG4gKi9cbmNvbnN0IERFTlNJVFlfU1JDU0VUX01VTFRJUExJRVJTID0gWzEsIDJdO1xuXG4vKipcbiAqIFVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyZWFrcG9pbnRzIHRvIHVzZSBvbiBmdWxsLXdpZHRoIGltYWdlc1xuICovXG5jb25zdCBWSUVXUE9SVF9CUkVBS1BPSU5UX0NVVE9GRiA9IDY0MDtcbi8qKlxuICogVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0d28gYXNwZWN0IHJhdGlvcyBhcmUgc2ltaWxhciBpbiB2YWx1ZS5cbiAqL1xuY29uc3QgQVNQRUNUX1JBVElPX1RPTEVSQU5DRSA9IDAuMTtcblxuLyoqXG4gKiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBpbWFnZSBoYXMgYmVlbiByZXF1ZXN0ZWQgYXQgYW4gb3Zlcmx5XG4gKiBsYXJnZSBzaXplIGNvbXBhcmVkIHRvIHRoZSBhY3R1YWwgcmVuZGVyZWQgaW1hZ2Ugc2l6ZSAoYWZ0ZXIgdGFraW5nXG4gKiBpbnRvIGFjY291bnQgYSB0eXBpY2FsIGRldmljZSBwaXhlbCByYXRpbykuIEluIHBpeGVscy5cbiAqL1xuY29uc3QgT1ZFUlNJWkVEX0lNQUdFX1RPTEVSQU5DRSA9IDEwMDA7XG5cbi8qKlxuICogVXNlZCB0byBsaW1pdCBhdXRvbWF0aWMgc3Jjc2V0IGdlbmVyYXRpb24gb2YgdmVyeSBsYXJnZSBzb3VyY2VzIGZvclxuICogZml4ZWQtc2l6ZSBpbWFnZXMuIEluIHBpeGVscy5cbiAqL1xuY29uc3QgRklYRURfU1JDU0VUX1dJRFRIX0xJTUlUID0gMTkyMDtcbmNvbnN0IEZJWEVEX1NSQ1NFVF9IRUlHSFRfTElNSVQgPSAxMDgwO1xuXG4vKipcbiAqIERlZmF1bHQgYmx1ciByYWRpdXMgb2YgdGhlIENTUyBmaWx0ZXIgdXNlZCBvbiBwbGFjZWhvbGRlciBpbWFnZXMsIGluIHBpeGVsc1xuICovXG5leHBvcnQgY29uc3QgUExBQ0VIT0xERVJfQkxVUl9BTU9VTlQgPSAxNTtcblxuLyoqXG4gKiBQbGFjZWhvbGRlciBkaW1lbnNpb24gKGhlaWdodCBvciB3aWR0aCkgbGltaXQgaW4gcGl4ZWxzLiBBbmd1bGFyIHByb2R1Y2VzIGEgd2FybmluZ1xuICogd2hlbiB0aGlzIGxpbWl0IGlzIGNyb3NzZWQuXG4gKi9cbmNvbnN0IFBMQUNFSE9MREVSX0RJTUVOU0lPTl9MSU1JVCA9IDEwMDA7XG5cbi8qKlxuICogVXNlZCB0byB3YXJuIG9yIGVycm9yIHdoZW4gdGhlIHVzZXIgcHJvdmlkZXMgYW4gb3Zlcmx5IGxhcmdlIGRhdGFVUkwgZm9yIHRoZSBwbGFjZWhvbGRlclxuICogYXR0cmlidXRlLlxuICogQ2hhcmFjdGVyIGNvdW50IG9mIEJhc2U2NCBpbWFnZXMgaXMgMSBjaGFyYWN0ZXIgcGVyIGJ5dGUsIGFuZCBiYXNlNjQgZW5jb2RpbmcgaXMgYXBwcm94aW1hdGVseVxuICogMzMlIGxhcmdlciB0aGFuIGJhc2UgaW1hZ2VzLCBzbyA0MDAwIGNoYXJhY3RlcnMgaXMgYXJvdW5kIDNLQiBvbiBkaXNrIGFuZCAxMDAwMCBjaGFyYWN0ZXJzIGlzXG4gKiBhcm91bmQgNy43S0IuIEV4cGVyaW1lbnRhbGx5LCA0MDAwIGNoYXJhY3RlcnMgaXMgYWJvdXQgMjB4MjBweCBpbiBQTkcgb3IgbWVkaXVtLXF1YWxpdHkgSlBFR1xuICogZm9ybWF0LCBhbmQgMTAsMDAwIGlzIGFyb3VuZCA1MHg1MHB4LCBidXQgdGhlcmUncyBxdWl0ZSBhIGJpdCBvZiB2YXJpYXRpb24gZGVwZW5kaW5nIG9uIGhvdyB0aGVcbiAqIGltYWdlIGlzIHNhdmVkLlxuICovXG5leHBvcnQgY29uc3QgREFUQV9VUkxfV0FSTl9MSU1JVCA9IDQwMDA7XG5leHBvcnQgY29uc3QgREFUQV9VUkxfRVJST1JfTElNSVQgPSAxMDAwMDtcblxuLyoqIEluZm8gYWJvdXQgYnVpbHQtaW4gbG9hZGVycyB3ZSBjYW4gdGVzdCBmb3IuICovXG5leHBvcnQgY29uc3QgQlVJTFRfSU5fTE9BREVSUyA9IFtcbiAgaW1naXhMb2FkZXJJbmZvLFxuICBpbWFnZUtpdExvYWRlckluZm8sXG4gIGNsb3VkaW5hcnlMb2FkZXJJbmZvLFxuICBuZXRsaWZ5TG9hZGVySW5mbyxcbl07XG5cbi8qKlxuICogVGhyZXNob2xkIGZvciB0aGUgUFJJT1JJVFlfVFJVRV9DT1VOVFxuICovXG5jb25zdCBQUklPUklUWV9DT1VOVF9USFJFU0hPTEQgPSAxMDtcblxuLyoqXG4gKiBUaGlzIGNvdW50IGlzIHVzZWQgdG8gbG9nIGEgZGV2TW9kZSB3YXJuaW5nXG4gKiB3aGVuIHRoZSBjb3VudCBvZiBkaXJlY3RpdmUgaW5zdGFuY2VzIHdpdGggcHJpb3JpdHk9dHJ1ZVxuICogZXhjZWVkcyB0aGUgdGhyZXNob2xkIFBSSU9SSVRZX0NPVU5UX1RIUkVTSE9MRFxuICovXG5sZXQgSU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlQgPSAwO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHRlc3RpbmcgcHVycG9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0SW1hZ2VQcmlvcml0eUNvdW50KCkge1xuICBJTUdTX1dJVEhfUFJJT1JJVFlfQVRUUl9DT1VOVCA9IDA7XG59XG5cbi8qKlxuICogQ29uZmlnIG9wdGlvbnMgdXNlZCBpbiByZW5kZXJpbmcgcGxhY2Vob2xkZXIgaW1hZ2VzLlxuICpcbiAqIEBzZWUge0BsaW5rIE5nT3B0aW1pemVkSW1hZ2V9XG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VQbGFjZWhvbGRlckNvbmZpZyB7XG4gIGJsdXI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERpcmVjdGl2ZSB0aGF0IGltcHJvdmVzIGltYWdlIGxvYWRpbmcgcGVyZm9ybWFuY2UgYnkgZW5mb3JjaW5nIGJlc3QgcHJhY3RpY2VzLlxuICpcbiAqIGBOZ09wdGltaXplZEltYWdlYCBlbnN1cmVzIHRoYXQgdGhlIGxvYWRpbmcgb2YgdGhlIExhcmdlc3QgQ29udGVudGZ1bCBQYWludCAoTENQKSBpbWFnZSBpc1xuICogcHJpb3JpdGl6ZWQgYnk6XG4gKiAtIEF1dG9tYXRpY2FsbHkgc2V0dGluZyB0aGUgYGZldGNocHJpb3JpdHlgIGF0dHJpYnV0ZSBvbiB0aGUgYDxpbWc+YCB0YWdcbiAqIC0gTGF6eSBsb2FkaW5nIG5vbi1wcmlvcml0eSBpbWFnZXMgYnkgZGVmYXVsdFxuICogLSBBdXRvbWF0aWNhbGx5IGdlbmVyYXRpbmcgYSBwcmVjb25uZWN0IGxpbmsgdGFnIGluIHRoZSBkb2N1bWVudCBoZWFkXG4gKlxuICogSW4gYWRkaXRpb24sIHRoZSBkaXJlY3RpdmU6XG4gKiAtIEdlbmVyYXRlcyBhcHByb3ByaWF0ZSBhc3NldCBVUkxzIGlmIGEgY29ycmVzcG9uZGluZyBgSW1hZ2VMb2FkZXJgIGZ1bmN0aW9uIGlzIHByb3ZpZGVkXG4gKiAtIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGEgc3Jjc2V0XG4gKiAtIFJlcXVpcmVzIHRoYXQgYHdpZHRoYCBhbmQgYGhlaWdodGAgYXJlIHNldFxuICogLSBXYXJucyBpZiBgd2lkdGhgIG9yIGBoZWlnaHRgIGhhdmUgYmVlbiBzZXQgaW5jb3JyZWN0bHlcbiAqIC0gV2FybnMgaWYgdGhlIGltYWdlIHdpbGwgYmUgdmlzdWFsbHkgZGlzdG9ydGVkIHdoZW4gcmVuZGVyZWRcbiAqXG4gKiBAdXNhZ2VOb3Rlc1xuICogVGhlIGBOZ09wdGltaXplZEltYWdlYCBkaXJlY3RpdmUgaXMgbWFya2VkIGFzIFtzdGFuZGFsb25lXShndWlkZS9jb21wb25lbnRzL2ltcG9ydGluZykgYW5kIGNhblxuICogYmUgaW1wb3J0ZWQgZGlyZWN0bHkuXG4gKlxuICogRm9sbG93IHRoZSBzdGVwcyBiZWxvdyB0byBlbmFibGUgYW5kIHVzZSB0aGUgZGlyZWN0aXZlOlxuICogMS4gSW1wb3J0IGl0IGludG8gdGhlIG5lY2Vzc2FyeSBOZ01vZHVsZSBvciBhIHN0YW5kYWxvbmUgQ29tcG9uZW50LlxuICogMi4gT3B0aW9uYWxseSBwcm92aWRlIGFuIGBJbWFnZUxvYWRlcmAgaWYgeW91IHVzZSBhbiBpbWFnZSBob3N0aW5nIHNlcnZpY2UuXG4gKiAzLiBVcGRhdGUgdGhlIG5lY2Vzc2FyeSBgPGltZz5gIHRhZ3MgaW4gdGVtcGxhdGVzIGFuZCByZXBsYWNlIGBzcmNgIGF0dHJpYnV0ZXMgd2l0aCBgbmdTcmNgLlxuICogVXNpbmcgYSBgbmdTcmNgIGFsbG93cyB0aGUgZGlyZWN0aXZlIHRvIGNvbnRyb2wgd2hlbiB0aGUgYHNyY2AgZ2V0cyBzZXQsIHdoaWNoIHRyaWdnZXJzIGFuIGltYWdlXG4gKiBkb3dubG9hZC5cbiAqXG4gKiBTdGVwIDE6IGltcG9ydCB0aGUgYE5nT3B0aW1pemVkSW1hZ2VgIGRpcmVjdGl2ZS5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBOZ09wdGltaXplZEltYWdlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbiAqXG4gKiAvLyBJbmNsdWRlIGl0IGludG8gdGhlIG5lY2Vzc2FyeSBOZ01vZHVsZVxuICogQE5nTW9kdWxlKHtcbiAqICAgaW1wb3J0czogW05nT3B0aW1pemVkSW1hZ2VdLFxuICogfSlcbiAqIGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIC4uLiBvciBhIHN0YW5kYWxvbmUgQ29tcG9uZW50XG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc3RhbmRhbG9uZTogdHJ1ZVxuICogICBpbXBvcnRzOiBbTmdPcHRpbWl6ZWRJbWFnZV0sXG4gKiB9KVxuICogY2xhc3MgTXlTdGFuZGFsb25lQ29tcG9uZW50IHt9XG4gKiBgYGBcbiAqXG4gKiBTdGVwIDI6IGNvbmZpZ3VyZSBhIGxvYWRlci5cbiAqXG4gKiBUbyB1c2UgdGhlICoqZGVmYXVsdCBsb2FkZXIqKjogbm8gYWRkaXRpb25hbCBjb2RlIGNoYW5nZXMgYXJlIG5lY2Vzc2FyeS4gVGhlIFVSTCByZXR1cm5lZCBieSB0aGVcbiAqIGdlbmVyaWMgbG9hZGVyIHdpbGwgYWx3YXlzIG1hdGNoIHRoZSB2YWx1ZSBvZiBcInNyY1wiLiBJbiBvdGhlciB3b3JkcywgdGhpcyBsb2FkZXIgYXBwbGllcyBub1xuICogdHJhbnNmb3JtYXRpb25zIHRvIHRoZSByZXNvdXJjZSBVUkwgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgYG5nU3JjYCBhdHRyaWJ1dGUgd2lsbCBiZSB1c2VkIGFzIGlzLlxuICpcbiAqIFRvIHVzZSBhbiBleGlzdGluZyBsb2FkZXIgZm9yIGEgKip0aGlyZC1wYXJ0eSBpbWFnZSBzZXJ2aWNlKio6IGFkZCB0aGUgcHJvdmlkZXIgZmFjdG9yeSBmb3IgeW91clxuICogY2hvc2VuIHNlcnZpY2UgdG8gdGhlIGBwcm92aWRlcnNgIGFycmF5LiBJbiB0aGUgZXhhbXBsZSBiZWxvdywgdGhlIEltZ2l4IGxvYWRlciBpcyB1c2VkOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7cHJvdmlkZUltZ2l4TG9hZGVyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuICpcbiAqIC8vIENhbGwgdGhlIGZ1bmN0aW9uIGFuZCBhZGQgdGhlIHJlc3VsdCB0byB0aGUgYHByb3ZpZGVyc2AgYXJyYXk6XG4gKiBwcm92aWRlcnM6IFtcbiAqICAgcHJvdmlkZUltZ2l4TG9hZGVyKFwiaHR0cHM6Ly9teS5iYXNlLnVybC9cIiksXG4gKiBdLFxuICogYGBgXG4gKlxuICogVGhlIGBOZ09wdGltaXplZEltYWdlYCBkaXJlY3RpdmUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6XG4gKiAtIGBwcm92aWRlQ2xvdWRmbGFyZUxvYWRlcmBcbiAqIC0gYHByb3ZpZGVDbG91ZGluYXJ5TG9hZGVyYFxuICogLSBgcHJvdmlkZUltYWdlS2l0TG9hZGVyYFxuICogLSBgcHJvdmlkZUltZ2l4TG9hZGVyYFxuICpcbiAqIElmIHlvdSB1c2UgYSBkaWZmZXJlbnQgaW1hZ2UgcHJvdmlkZXIsIHlvdSBjYW4gY3JlYXRlIGEgY3VzdG9tIGxvYWRlciBmdW5jdGlvbiBhcyBkZXNjcmliZWRcbiAqIGJlbG93LlxuICpcbiAqIFRvIHVzZSBhICoqY3VzdG9tIGxvYWRlcioqOiBwcm92aWRlIHlvdXIgbG9hZGVyIGZ1bmN0aW9uIGFzIGEgdmFsdWUgZm9yIHRoZSBgSU1BR0VfTE9BREVSYCBESVxuICogdG9rZW4uXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHtJTUFHRV9MT0FERVIsIEltYWdlTG9hZGVyQ29uZmlnfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuICpcbiAqIC8vIENvbmZpZ3VyZSB0aGUgbG9hZGVyIHVzaW5nIHRoZSBgSU1BR0VfTE9BREVSYCB0b2tlbi5cbiAqIHByb3ZpZGVyczogW1xuICogICB7XG4gKiAgICAgIHByb3ZpZGU6IElNQUdFX0xPQURFUixcbiAqICAgICAgdXNlVmFsdWU6IChjb25maWc6IEltYWdlTG9hZGVyQ29uZmlnKSA9PiB7XG4gKiAgICAgICAgcmV0dXJuIGBodHRwczovL2V4YW1wbGUuY29tLyR7Y29uZmlnLnNyY30tJHtjb25maWcud2lkdGh9LmpwZ31gO1xuICogICAgICB9XG4gKiAgIH0sXG4gKiBdLFxuICogYGBgXG4gKlxuICogU3RlcCAzOiB1cGRhdGUgYDxpbWc+YCB0YWdzIGluIHRlbXBsYXRlcyB0byB1c2UgYG5nU3JjYCBpbnN0ZWFkIG9mIGBzcmNgLlxuICpcbiAqIGBgYFxuICogPGltZyBuZ1NyYz1cImxvZ28ucG5nXCIgd2lkdGg9XCIyMDBcIiBoZWlnaHQ9XCIxMDBcIj5cbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNBcGlcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaW1nW25nU3JjXScsXG4gIGhvc3Q6IHtcbiAgICAnW3N0eWxlLnBvc2l0aW9uXSc6ICdmaWxsID8gXCJhYnNvbHV0ZVwiIDogbnVsbCcsXG4gICAgJ1tzdHlsZS53aWR0aF0nOiAnZmlsbCA/IFwiMTAwJVwiIDogbnVsbCcsXG4gICAgJ1tzdHlsZS5oZWlnaHRdJzogJ2ZpbGwgPyBcIjEwMCVcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuaW5zZXRdJzogJ2ZpbGwgPyBcIjBcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuYmFja2dyb3VuZC1zaXplXSc6ICdwbGFjZWhvbGRlciA/IFwiY292ZXJcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuYmFja2dyb3VuZC1wb3NpdGlvbl0nOiAncGxhY2Vob2xkZXIgPyBcIjUwJSA1MCVcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuYmFja2dyb3VuZC1yZXBlYXRdJzogJ3BsYWNlaG9sZGVyID8gXCJuby1yZXBlYXRcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV0nOiAncGxhY2Vob2xkZXIgPyBnZW5lcmF0ZVBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyKSA6IG51bGwnLFxuICAgICdbc3R5bGUuZmlsdGVyXSc6IGBwbGFjZWhvbGRlciAmJiBzaG91bGRCbHVyUGxhY2Vob2xkZXIocGxhY2Vob2xkZXJDb25maWcpID8gXCJibHVyKCR7UExBQ0VIT0xERVJfQkxVUl9BTU9VTlR9cHgpXCIgOiBudWxsYCxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgTmdPcHRpbWl6ZWRJbWFnZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGltYWdlTG9hZGVyID0gaW5qZWN0KElNQUdFX0xPQURFUik7XG4gIHByaXZhdGUgY29uZmlnOiBJbWFnZUNvbmZpZyA9IHByb2Nlc3NDb25maWcoaW5qZWN0KElNQUdFX0NPTkZJRykpO1xuICBwcml2YXRlIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIHByaXZhdGUgaW1nRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50O1xuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1NlcnZlciA9IGlzUGxhdGZvcm1TZXJ2ZXIoaW5qZWN0KFBMQVRGT1JNX0lEKSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlbG9hZExpbmtDcmVhdG9yID0gaW5qZWN0KFByZWxvYWRMaW5rQ3JlYXRvcik7XG5cbiAgLy8gYSBMQ1AgaW1hZ2Ugb2JzZXJ2ZXIgLSBzaG91bGQgYmUgaW5qZWN0ZWQgb25seSBpbiB0aGUgZGV2IG1vZGVcbiAgcHJpdmF0ZSBsY3BPYnNlcnZlciA9IG5nRGV2TW9kZSA/IHRoaXMuaW5qZWN0b3IuZ2V0KExDUEltYWdlT2JzZXJ2ZXIpIDogbnVsbDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSByZXdyaXR0ZW4gYHNyY2Agb25jZSBhbmQgc3RvcmUgaXQuXG4gICAqIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIHJlcGV0aXRpdmUgY2FsY3VsYXRpb25zIGFuZCBtYWtlIHN1cmUgdGhlIGRpcmVjdGl2ZSBjbGVhbnVwIGluIHRoZVxuICAgKiBgbmdPbkRlc3Ryb3lgIGRvZXMgbm90IHJlbHkgb24gdGhlIGBJTUFHRV9MT0FERVJgIGxvZ2ljICh3aGljaCBpbiB0dXJuIGNhbiByZWx5IG9uIHNvbWUgb3RoZXJcbiAgICogaW5zdGFuY2UgdGhhdCBtaWdodCBiZSBhbHJlYWR5IGRlc3Ryb3llZCkuXG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJlZFNyYzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNvdXJjZSBpbWFnZS5cbiAgICogSW1hZ2UgbmFtZSB3aWxsIGJlIHByb2Nlc3NlZCBieSB0aGUgaW1hZ2UgbG9hZGVyIGFuZCB0aGUgZmluYWwgVVJMIHdpbGwgYmUgYXBwbGllZCBhcyB0aGUgYHNyY2BcbiAgICogcHJvcGVydHkgb2YgdGhlIGltYWdlLlxuICAgKi9cbiAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZSwgdHJhbnNmb3JtOiB1bndyYXBTYWZlVXJsfSkgbmdTcmMhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygd2lkdGggb3IgZGVuc2l0eSBkZXNjcmlwdG9ycy5cbiAgICogVGhlIGltYWdlIG5hbWUgd2lsbCBiZSB0YWtlbiBmcm9tIGBuZ1NyY2AgYW5kIGNvbWJpbmVkIHdpdGggdGhlIGxpc3Qgb2Ygd2lkdGggb3IgZGVuc2l0eVxuICAgKiBkZXNjcmlwdG9ycyB0byBnZW5lcmF0ZSB0aGUgZmluYWwgYHNyY3NldGAgcHJvcGVydHkgb2YgdGhlIGltYWdlLlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGBcbiAgICogPGltZyBuZ1NyYz1cImhlbGxvLmpwZ1wiIG5nU3Jjc2V0PVwiMTAwdywgMjAwd1wiIC8+ICA9PlxuICAgKiA8aW1nIHNyYz1cInBhdGgvaGVsbG8uanBnXCIgc3Jjc2V0PVwicGF0aC9oZWxsby5qcGc/dz0xMDAgMTAwdywgcGF0aC9oZWxsby5qcGc/dz0yMDAgMjAwd1wiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCkgbmdTcmNzZXQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGBzaXplc2AgYXR0cmlidXRlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBgPGltZz5gIGVsZW1lbnQuXG4gICAqIFByb3ZpZGluZyBzaXplcyBjYXVzZXMgdGhlIGltYWdlIHRvIGNyZWF0ZSBhbiBhdXRvbWF0aWMgcmVzcG9uc2l2ZSBzcmNzZXQuXG4gICAqL1xuICBASW5wdXQoKSBzaXplcz86IHN0cmluZztcblxuICAvKipcbiAgICogRm9yIHJlc3BvbnNpdmUgaW1hZ2VzOiB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuXG4gICAqIEZvciBmaXhlZCBzaXplIGltYWdlczogdGhlIGRlc2lyZWQgcmVuZGVyZWQgd2lkdGggb2YgdGhlIGltYWdlIGluIHBpeGVscy5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGV9KSB3aWR0aDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBGb3IgcmVzcG9uc2l2ZSBpbWFnZXM6IHRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuXG4gICAqIEZvciBmaXhlZCBzaXplIGltYWdlczogdGhlIGRlc2lyZWQgcmVuZGVyZWQgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuXG4gICAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlfSkgaGVpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGxvYWRpbmcgYmVoYXZpb3IgKGxhenksIGVhZ2VyLCBvciBhdXRvKS4gRGVmYXVsdHMgdG8gYGxhenlgLFxuICAgKiB3aGljaCBpcyByZWNvbW1lbmRlZCBmb3IgbW9zdCBpbWFnZXMuXG4gICAqXG4gICAqIFdhcm5pbmc6IFNldHRpbmcgaW1hZ2VzIGFzIGxvYWRpbmc9XCJlYWdlclwiIG9yIGxvYWRpbmc9XCJhdXRvXCIgbWFya3MgdGhlbVxuICAgKiBhcyBub24tcHJpb3JpdHkgaW1hZ2VzIGFuZCBjYW4gaHVydCBsb2FkaW5nIHBlcmZvcm1hbmNlLiBGb3IgaW1hZ2VzIHdoaWNoXG4gICAqIG1heSBiZSB0aGUgTENQIGVsZW1lbnQsIHVzZSB0aGUgYHByaW9yaXR5YCBhdHRyaWJ1dGUgaW5zdGVhZCBvZiBgbG9hZGluZ2AuXG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nPzogJ2xhenknIHwgJ2VhZ2VyJyB8ICdhdXRvJztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpbWFnZSBzaG91bGQgaGF2ZSBhIGhpZ2ggcHJpb3JpdHkuXG4gICAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pIHByaW9yaXR5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERhdGEgdG8gcGFzcyB0aHJvdWdoIHRvIGN1c3RvbSBsb2FkZXJzLlxuICAgKi9cbiAgQElucHV0KCkgbG9hZGVyUGFyYW1zPzoge1trZXk6IHN0cmluZ106IGFueX07XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIGF1dG9tYXRpYyBzcmNzZXQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBpbWFnZS5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSkgZGlzYWJsZU9wdGltaXplZFNyY3NldCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbWFnZSB0byBcImZpbGwgbW9kZVwiLCB3aGljaCBlbGltaW5hdGVzIHRoZSBoZWlnaHQvd2lkdGggcmVxdWlyZW1lbnQgYW5kIGFkZHNcbiAgICogc3R5bGVzIHN1Y2ggdGhhdCB0aGUgaW1hZ2UgZmlsbHMgaXRzIGNvbnRhaW5pbmcgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSkgZmlsbCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIFVSTCBvciBkYXRhIFVSTCBmb3IgYW4gaW1hZ2UgdG8gYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIHdoaWxlIHRoaXMgaW1hZ2UgbG9hZHMuXG4gICAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbk9yVXJsQXR0cmlidXRlfSkgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgcGxhY2Vob2xkZXIgc2V0dGluZ3MuIE9wdGlvbnM6XG4gICAqICAgKiBibHVyOiBTZXR0aW5nIHRoaXMgdG8gZmFsc2UgZGlzYWJsZXMgdGhlIGF1dG9tYXRpYyBDU1MgYmx1ci5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyQ29uZmlnPzogSW1hZ2VQbGFjZWhvbGRlckNvbmZpZztcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIGBzcmNgIGF0dHJpYnV0ZSBpZiBzZXQgb24gdGhlIGhvc3QgYDxpbWc+YCBlbGVtZW50LlxuICAgKiBUaGlzIGlucHV0IGlzIGV4Y2x1c2l2ZWx5IHJlYWQgdG8gYXNzZXJ0IHRoYXQgYHNyY2AgaXMgbm90IHNldCBpbiBjb25mbGljdFxuICAgKiB3aXRoIGBuZ1NyY2AgYW5kIHRoYXQgaW1hZ2VzIGRvbid0IHN0YXJ0IHRvIGxvYWQgdW50aWwgYSBsYXp5IGxvYWRpbmcgc3RyYXRlZ3kgaXMgc2V0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpIHNyYz86IHN0cmluZztcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIGBzcmNzZXRgIGF0dHJpYnV0ZSBpZiBzZXQgb24gdGhlIGhvc3QgYDxpbWc+YCBlbGVtZW50LlxuICAgKiBUaGlzIGlucHV0IGlzIGV4Y2x1c2l2ZWx5IHJlYWQgdG8gYXNzZXJ0IHRoYXQgYHNyY3NldGAgaXMgbm90IHNldCBpbiBjb25mbGljdFxuICAgKiB3aXRoIGBuZ1NyY3NldGAgYW5kIHRoYXQgaW1hZ2VzIGRvbid0IHN0YXJ0IHRvIGxvYWQgdW50aWwgYSBsYXp5IGxvYWRpbmcgc3RyYXRlZ3kgaXMgc2V0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpIHNyY3NldD86IHN0cmluZztcblxuICAvKiogQG5vZG9jICovXG4gIG5nT25Jbml0KCkge1xuICAgIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUoJ05nT3B0aW1pemVkSW1hZ2UnKTtcblxuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGNvbnN0IG5nWm9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgICBhc3NlcnROb25FbXB0eUlucHV0KHRoaXMsICduZ1NyYycsIHRoaXMubmdTcmMpO1xuICAgICAgYXNzZXJ0VmFsaWROZ1NyY3NldCh0aGlzLCB0aGlzLm5nU3Jjc2V0KTtcbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdTcmModGhpcyk7XG4gICAgICBpZiAodGhpcy5uZ1NyY3NldCkge1xuICAgICAgICBhc3NlcnROb0NvbmZsaWN0aW5nU3Jjc2V0KHRoaXMpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0Tm90QmFzZTY0SW1hZ2UodGhpcyk7XG4gICAgICBhc3NlcnROb3RCbG9iVXJsKHRoaXMpO1xuICAgICAgaWYgKHRoaXMuZmlsbCkge1xuICAgICAgICBhc3NlcnRFbXB0eVdpZHRoQW5kSGVpZ2h0KHRoaXMpO1xuICAgICAgICAvLyBUaGlzIGxlYXZlcyB0aGUgQW5ndWxhciB6b25lIHRvIGF2b2lkIHRyaWdnZXJpbmcgdW5uZWNlc3NhcnkgY2hhbmdlIGRldGVjdGlvbiBjeWNsZXMgd2hlblxuICAgICAgICAvLyBgbG9hZGAgdGFza3MgYXJlIGludm9rZWQgb24gaW1hZ2VzLlxuICAgICAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICBhc3NlcnROb25aZXJvUmVuZGVyZWRIZWlnaHQodGhpcywgdGhpcy5pbWdFbGVtZW50LCB0aGlzLnJlbmRlcmVyKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydE5vbkVtcHR5V2lkdGhBbmRIZWlnaHQodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLmhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXNzZXJ0R3JlYXRlclRoYW5aZXJvKHRoaXMsIHRoaXMuaGVpZ2h0LCAnaGVpZ2h0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFzc2VydEdyZWF0ZXJUaGFuWmVybyh0aGlzLCB0aGlzLndpZHRoLCAnd2lkdGgnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPbmx5IGNoZWNrIGZvciBkaXN0b3J0ZWQgaW1hZ2VzIHdoZW4gbm90IGluIGZpbGwgbW9kZSwgd2hlcmVcbiAgICAgICAgLy8gaW1hZ2VzIG1heSBiZSBpbnRlbnRpb25hbGx5IHN0cmV0Y2hlZCwgY3JvcHBlZCBvciBsZXR0ZXJib3hlZC5cbiAgICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgYXNzZXJ0Tm9JbWFnZURpc3RvcnRpb24odGhpcywgdGhpcy5pbWdFbGVtZW50LCB0aGlzLnJlbmRlcmVyKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydFZhbGlkTG9hZGluZ0lucHV0KHRoaXMpO1xuICAgICAgaWYgKCF0aGlzLm5nU3Jjc2V0KSB7XG4gICAgICAgIGFzc2VydE5vQ29tcGxleFNpemVzKHRoaXMpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0VmFsaWRQbGFjZWhvbGRlcih0aGlzLCB0aGlzLmltYWdlTG9hZGVyKTtcbiAgICAgIGFzc2VydE5vdE1pc3NpbmdCdWlsdEluTG9hZGVyKHRoaXMubmdTcmMsIHRoaXMuaW1hZ2VMb2FkZXIpO1xuICAgICAgYXNzZXJ0Tm9OZ1NyY3NldFdpdGhvdXRMb2FkZXIodGhpcywgdGhpcy5pbWFnZUxvYWRlcik7XG4gICAgICBhc3NlcnROb0xvYWRlclBhcmFtc1dpdGhvdXRMb2FkZXIodGhpcywgdGhpcy5pbWFnZUxvYWRlcik7XG5cbiAgICAgIGlmICh0aGlzLmxjcE9ic2VydmVyICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG5nWm9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgICAgIG5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sY3BPYnNlcnZlciEucmVnaXN0ZXJJbWFnZSh0aGlzLmdldFJld3JpdHRlblNyYygpLCB0aGlzLm5nU3JjLCB0aGlzLnByaW9yaXR5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByaW9yaXR5KSB7XG4gICAgICAgIGNvbnN0IGNoZWNrZXIgPSB0aGlzLmluamVjdG9yLmdldChQcmVjb25uZWN0TGlua0NoZWNrZXIpO1xuICAgICAgICBjaGVja2VyLmFzc2VydFByZWNvbm5lY3QodGhpcy5nZXRSZXdyaXR0ZW5TcmMoKSwgdGhpcy5uZ1NyYyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzU2VydmVyKSB7XG4gICAgICAgICAgY29uc3QgYXBwbGljYXRpb25SZWYgPSB0aGlzLmluamVjdG9yLmdldChBcHBsaWNhdGlvblJlZik7XG4gICAgICAgICAgYXNzZXRQcmlvcml0eUNvdW50QmVsb3dUaHJlc2hvbGQoYXBwbGljYXRpb25SZWYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnJlbW92ZVBsYWNlaG9sZGVyT25Mb2FkKHRoaXMuaW1nRWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SG9zdEF0dHJpYnV0ZXMoKSB7XG4gICAgLy8gTXVzdCBzZXQgd2lkdGgvaGVpZ2h0IGV4cGxpY2l0bHkgaW4gY2FzZSB0aGV5IGFyZSBib3VuZCAoaW4gd2hpY2ggY2FzZSB0aGV5IHdpbGxcbiAgICAvLyBvbmx5IGJlIHJlZmxlY3RlZCBhbmQgbm90IGZvdW5kIGJ5IHRoZSBicm93c2VyKVxuICAgIGlmICh0aGlzLmZpbGwpIHtcbiAgICAgIHRoaXMuc2l6ZXMgfHw9ICcxMDB2dyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnd2lkdGgnLCB0aGlzLndpZHRoIS50b1N0cmluZygpKTtcbiAgICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnaGVpZ2h0JywgdGhpcy5oZWlnaHQhLnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnbG9hZGluZycsIHRoaXMuZ2V0TG9hZGluZ0JlaGF2aW9yKCkpO1xuICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnZmV0Y2hwcmlvcml0eScsIHRoaXMuZ2V0RmV0Y2hQcmlvcml0eSgpKTtcblxuICAgIC8vIFRoZSBgZGF0YS1uZy1pbWdgIGF0dHJpYnV0ZSBmbGFncyBhbiBpbWFnZSBhcyB1c2luZyB0aGUgZGlyZWN0aXZlLCB0byBhbGxvd1xuICAgIC8vIGZvciBhbmFseXNpcyBvZiB0aGUgZGlyZWN0aXZlJ3MgcGVyZm9ybWFuY2UuXG4gICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCduZy1pbWcnLCAndHJ1ZScpO1xuXG4gICAgLy8gVGhlIGBzcmNgIGFuZCBgc3Jjc2V0YCBhdHRyaWJ1dGVzIHNob3VsZCBiZSBzZXQgbGFzdCBzaW5jZSBvdGhlciBhdHRyaWJ1dGVzXG4gICAgLy8gY291bGQgYWZmZWN0IHRoZSBpbWFnZSdzIGxvYWRpbmcgYmVoYXZpb3IuXG4gICAgY29uc3QgcmV3cml0dGVuU3Jjc2V0ID0gdGhpcy51cGRhdGVTcmNBbmRTcmNzZXQoKTtcblxuICAgIGlmICh0aGlzLnNpemVzKSB7XG4gICAgICB0aGlzLnNldEhvc3RBdHRyaWJ1dGUoJ3NpemVzJywgdGhpcy5zaXplcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VydmVyICYmIHRoaXMucHJpb3JpdHkpIHtcbiAgICAgIHRoaXMucHJlbG9hZExpbmtDcmVhdG9yLmNyZWF0ZVByZWxvYWRMaW5rVGFnKFxuICAgICAgICB0aGlzLnJlbmRlcmVyLFxuICAgICAgICB0aGlzLmdldFJld3JpdHRlblNyYygpLFxuICAgICAgICByZXdyaXR0ZW5TcmNzZXQsXG4gICAgICAgIHRoaXMuc2l6ZXMsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAbm9kb2MgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGFzc2VydE5vUG9zdEluaXRJbnB1dENoYW5nZSh0aGlzLCBjaGFuZ2VzLCBbXG4gICAgICAgICduZ1NyY3NldCcsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAncHJpb3JpdHknLFxuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdsb2FkaW5nJyxcbiAgICAgICAgJ3NpemVzJyxcbiAgICAgICAgJ2xvYWRlclBhcmFtcycsXG4gICAgICAgICdkaXNhYmxlT3B0aW1pemVkU3Jjc2V0JyxcbiAgICAgIF0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snbmdTcmMnXSAmJiAhY2hhbmdlc1snbmdTcmMnXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIGNvbnN0IG9sZFNyYyA9IHRoaXMuX3JlbmRlcmVkU3JjO1xuICAgICAgdGhpcy51cGRhdGVTcmNBbmRTcmNzZXQodHJ1ZSk7XG4gICAgICBjb25zdCBuZXdTcmMgPSB0aGlzLl9yZW5kZXJlZFNyYztcbiAgICAgIGlmICh0aGlzLmxjcE9ic2VydmVyICE9PSBudWxsICYmIG9sZFNyYyAmJiBuZXdTcmMgJiYgb2xkU3JjICE9PSBuZXdTcmMpIHtcbiAgICAgICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxjcE9ic2VydmVyPy51cGRhdGVJbWFnZShvbGRTcmMsIG5ld1NyYyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZ0Rldk1vZGUgJiYgY2hhbmdlc1sncGxhY2Vob2xkZXInXT8uY3VycmVudFZhbHVlICYmICF0aGlzLmlzU2VydmVyKSB7XG4gICAgICBhc3NlcnRQbGFjZWhvbGRlckRpbWVuc2lvbnModGhpcywgdGhpcy5pbWdFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhbGxJbWFnZUxvYWRlcihcbiAgICBjb25maWdXaXRob3V0Q3VzdG9tUGFyYW1zOiBPbWl0PEltYWdlTG9hZGVyQ29uZmlnLCAnbG9hZGVyUGFyYW1zJz4sXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGF1Z21lbnRlZENvbmZpZzogSW1hZ2VMb2FkZXJDb25maWcgPSBjb25maWdXaXRob3V0Q3VzdG9tUGFyYW1zO1xuICAgIGlmICh0aGlzLmxvYWRlclBhcmFtcykge1xuICAgICAgYXVnbWVudGVkQ29uZmlnLmxvYWRlclBhcmFtcyA9IHRoaXMubG9hZGVyUGFyYW1zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbWFnZUxvYWRlcihhdWdtZW50ZWRDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2FkaW5nQmVoYXZpb3IoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucHJpb3JpdHkgJiYgdGhpcy5sb2FkaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByaW9yaXR5ID8gJ2VhZ2VyJyA6ICdsYXp5JztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmV0Y2hQcmlvcml0eSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByaW9yaXR5ID8gJ2hpZ2gnIDogJ2F1dG8nO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXdyaXR0ZW5TcmMoKTogc3RyaW5nIHtcbiAgICAvLyBJbWFnZUxvYWRlckNvbmZpZyBzdXBwb3J0cyBzZXR0aW5nIGEgd2lkdGggcHJvcGVydHkuIEhvd2V2ZXIsIHdlJ3JlIG5vdCBzZXR0aW5nIHdpZHRoIGhlcmVcbiAgICAvLyBiZWNhdXNlIGlmIHRoZSBkZXZlbG9wZXIgdXNlcyByZW5kZXJlZCB3aWR0aCBpbnN0ZWFkIG9mIGludHJpbnNpYyB3aWR0aCBpbiB0aGUgSFRNTCB3aWR0aFxuICAgIC8vIGF0dHJpYnV0ZSwgdGhlIGltYWdlIHJlcXVlc3RlZCBtYXkgYmUgdG9vIHNtYWxsIGZvciAyeCsgc2NyZWVucy5cbiAgICBpZiAoIXRoaXMuX3JlbmRlcmVkU3JjKSB7XG4gICAgICBjb25zdCBpbWdDb25maWcgPSB7c3JjOiB0aGlzLm5nU3JjfTtcbiAgICAgIC8vIENhY2hlIGNhbGN1bGF0ZWQgaW1hZ2Ugc3JjIHRvIHJldXNlIGl0IGxhdGVyIGluIHRoZSBjb2RlLlxuICAgICAgdGhpcy5fcmVuZGVyZWRTcmMgPSB0aGlzLmNhbGxJbWFnZUxvYWRlcihpbWdDb25maWcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyZWRTcmM7XG4gIH1cblxuICBwcml2YXRlIGdldFJld3JpdHRlblNyY3NldCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHdpZHRoU3JjU2V0ID0gVkFMSURfV0lEVEhfREVTQ1JJUFRPUl9TUkNTRVQudGVzdCh0aGlzLm5nU3Jjc2V0KTtcbiAgICBjb25zdCBmaW5hbFNyY3MgPSB0aGlzLm5nU3Jjc2V0XG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLmZpbHRlcigoc3JjKSA9PiBzcmMgIT09ICcnKVxuICAgICAgLm1hcCgoc3JjU3RyKSA9PiB7XG4gICAgICAgIHNyY1N0ciA9IHNyY1N0ci50cmltKCk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gd2lkdGhTcmNTZXQgPyBwYXJzZUZsb2F0KHNyY1N0cikgOiBwYXJzZUZsb2F0KHNyY1N0cikgKiB0aGlzLndpZHRoITtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY2FsbEltYWdlTG9hZGVyKHtzcmM6IHRoaXMubmdTcmMsIHdpZHRofSl9ICR7c3JjU3RyfWA7XG4gICAgICB9KTtcbiAgICByZXR1cm4gZmluYWxTcmNzLmpvaW4oJywgJyk7XG4gIH1cblxuICBwcml2YXRlIGdldEF1dG9tYXRpY1NyY3NldCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnNpemVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNwb25zaXZlU3Jjc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpeGVkU3Jjc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXNwb25zaXZlU3Jjc2V0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qge2JyZWFrcG9pbnRzfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgbGV0IGZpbHRlcmVkQnJlYWtwb2ludHMgPSBicmVha3BvaW50cyE7XG4gICAgaWYgKHRoaXMuc2l6ZXM/LnRyaW0oKSA9PT0gJzEwMHZ3Jykge1xuICAgICAgLy8gU2luY2UgdGhpcyBpcyBhIGZ1bGwtc2NyZWVuLXdpZHRoIGltYWdlLCBvdXIgc3Jjc2V0IG9ubHkgbmVlZHMgdG8gaW5jbHVkZVxuICAgICAgLy8gYnJlYWtwb2ludHMgd2l0aCBmdWxsIHZpZXdwb3J0IHdpZHRocy5cbiAgICAgIGZpbHRlcmVkQnJlYWtwb2ludHMgPSBicmVha3BvaW50cyEuZmlsdGVyKChicCkgPT4gYnAgPj0gVklFV1BPUlRfQlJFQUtQT0lOVF9DVVRPRkYpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsU3JjcyA9IGZpbHRlcmVkQnJlYWtwb2ludHMubWFwKFxuICAgICAgKGJwKSA9PiBgJHt0aGlzLmNhbGxJbWFnZUxvYWRlcih7c3JjOiB0aGlzLm5nU3JjLCB3aWR0aDogYnB9KX0gJHticH13YCxcbiAgICApO1xuICAgIHJldHVybiBmaW5hbFNyY3Muam9pbignLCAnKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3JjQW5kU3Jjc2V0KGZvcmNlU3JjUmVjYWxjID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChmb3JjZVNyY1JlY2FsYykge1xuICAgICAgLy8gUmVzZXQgY2FjaGVkIHZhbHVlLCBzbyB0aGF0IHRoZSBmb2xsb3d1cCBgZ2V0UmV3cml0dGVuU3JjKClgIGNhbGxcbiAgICAgIC8vIHdpbGwgcmVjYWxjdWxhdGUgaXQgYW5kIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICB0aGlzLl9yZW5kZXJlZFNyYyA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmV3cml0dGVuU3JjID0gdGhpcy5nZXRSZXdyaXR0ZW5TcmMoKTtcbiAgICB0aGlzLnNldEhvc3RBdHRyaWJ1dGUoJ3NyYycsIHJld3JpdHRlblNyYyk7XG5cbiAgICBsZXQgcmV3cml0dGVuU3Jjc2V0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMubmdTcmNzZXQpIHtcbiAgICAgIHJld3JpdHRlblNyY3NldCA9IHRoaXMuZ2V0UmV3cml0dGVuU3Jjc2V0KCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3VsZEdlbmVyYXRlQXV0b21hdGljU3Jjc2V0KCkpIHtcbiAgICAgIHJld3JpdHRlblNyY3NldCA9IHRoaXMuZ2V0QXV0b21hdGljU3Jjc2V0KCk7XG4gICAgfVxuXG4gICAgaWYgKHJld3JpdHRlblNyY3NldCkge1xuICAgICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCdzcmNzZXQnLCByZXdyaXR0ZW5TcmNzZXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmV3cml0dGVuU3Jjc2V0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaXhlZFNyY3NldCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpbmFsU3JjcyA9IERFTlNJVFlfU1JDU0VUX01VTFRJUExJRVJTLm1hcChcbiAgICAgIChtdWx0aXBsaWVyKSA9PlxuICAgICAgICBgJHt0aGlzLmNhbGxJbWFnZUxvYWRlcih7XG4gICAgICAgICAgc3JjOiB0aGlzLm5nU3JjLFxuICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoISAqIG11bHRpcGxpZXIsXG4gICAgICAgIH0pfSAke211bHRpcGxpZXJ9eGAsXG4gICAgKTtcbiAgICByZXR1cm4gZmluYWxTcmNzLmpvaW4oJywgJyk7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZEdlbmVyYXRlQXV0b21hdGljU3Jjc2V0KCk6IGJvb2xlYW4ge1xuICAgIGxldCBvdmVyc2l6ZWRJbWFnZSA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5zaXplcykge1xuICAgICAgb3ZlcnNpemVkSW1hZ2UgPVxuICAgICAgICB0aGlzLndpZHRoISA+IEZJWEVEX1NSQ1NFVF9XSURUSF9MSU1JVCB8fCB0aGlzLmhlaWdodCEgPiBGSVhFRF9TUkNTRVRfSEVJR0hUX0xJTUlUO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuZGlzYWJsZU9wdGltaXplZFNyY3NldCAmJlxuICAgICAgIXRoaXMuc3Jjc2V0ICYmXG4gICAgICB0aGlzLmltYWdlTG9hZGVyICE9PSBub29wSW1hZ2VMb2FkZXIgJiZcbiAgICAgICFvdmVyc2l6ZWRJbWFnZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBpbWFnZSB1cmwgZm9ybWF0dGVkIGZvciB1c2Ugd2l0aCB0aGUgQ1NTIGJhY2tncm91bmQtaW1hZ2UgcHJvcGVydHkuIEV4cGVjdHMgb25lIG9mOlxuICAgKiAqIEEgYmFzZTY0IGVuY29kZWQgaW1hZ2UsIHdoaWNoIGlzIHdyYXBwZWQgYW5kIHBhc3NlZCB0aHJvdWdoLlxuICAgKiAqIEEgYm9vbGVhbi4gSWYgdHJ1ZSwgY2FsbHMgdGhlIGltYWdlIGxvYWRlciB0byBnZW5lcmF0ZSBhIHNtYWxsIHBsYWNlaG9sZGVyIHVybC5cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVQbGFjZWhvbGRlcihwbGFjZWhvbGRlcklucHV0OiBzdHJpbmcgfCBib29sZWFuKTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwge1xuICAgIGNvbnN0IHtwbGFjZWhvbGRlclJlc29sdXRpb259ID0gdGhpcy5jb25maWc7XG4gICAgaWYgKHBsYWNlaG9sZGVySW5wdXQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBgdXJsKCR7dGhpcy5jYWxsSW1hZ2VMb2FkZXIoe1xuICAgICAgICBzcmM6IHRoaXMubmdTcmMsXG4gICAgICAgIHdpZHRoOiBwbGFjZWhvbGRlclJlc29sdXRpb24sXG4gICAgICAgIGlzUGxhY2Vob2xkZXI6IHRydWUsXG4gICAgICB9KX0pYDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbGFjZWhvbGRlcklucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGB1cmwoJHtwbGFjZWhvbGRlcklucHV0fSlgO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGJsdXIgc2hvdWxkIGJlIGFwcGxpZWQsIGJhc2VkIG9uIGFuIG9wdGlvbmFsIGJvb2xlYW5cbiAgICogcHJvcGVydHkgYGJsdXJgIHdpdGhpbiB0aGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QgYHBsYWNlaG9sZGVyQ29uZmlnYC5cbiAgICovXG4gIHByaXZhdGUgc2hvdWxkQmx1clBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyQ29uZmlnPzogSW1hZ2VQbGFjZWhvbGRlckNvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmICghcGxhY2Vob2xkZXJDb25maWcgfHwgIXBsYWNlaG9sZGVyQ29uZmlnLmhhc093blByb3BlcnR5KCdibHVyJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbihwbGFjZWhvbGRlckNvbmZpZy5ibHVyKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUGxhY2Vob2xkZXJPbkxvYWQoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VEZXRlY3RvclJlZiA9IHRoaXMuaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICAgIHJlbW92ZUxvYWRMaXN0ZW5lckZuKCk7XG4gICAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcbiAgICAgIGNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmVMb2FkTGlzdGVuZXJGbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGltZywgJ2xvYWQnLCBjYWxsYmFjayk7XG4gICAgY29uc3QgcmVtb3ZlRXJyb3JMaXN0ZW5lckZuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oaW1nLCAnZXJyb3InLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKiogQG5vZG9jICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGlmICghdGhpcy5wcmlvcml0eSAmJiB0aGlzLl9yZW5kZXJlZFNyYyAhPT0gbnVsbCAmJiB0aGlzLmxjcE9ic2VydmVyICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubGNwT2JzZXJ2ZXIudW5yZWdpc3RlckltYWdlKHRoaXMuX3JlbmRlcmVkU3JjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEhvc3RBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5pbWdFbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqKioqIEhlbHBlcnMgKioqKiovXG5cbi8qKlxuICogU29ydHMgcHJvdmlkZWQgY29uZmlnIGJyZWFrcG9pbnRzIGFuZCB1c2VzIGRlZmF1bHRzLlxuICovXG5mdW5jdGlvbiBwcm9jZXNzQ29uZmlnKGNvbmZpZzogSW1hZ2VDb25maWcpOiBJbWFnZUNvbmZpZyB7XG4gIGxldCBzb3J0ZWRCcmVha3BvaW50czoge2JyZWFrcG9pbnRzPzogbnVtYmVyW119ID0ge307XG4gIGlmIChjb25maWcuYnJlYWtwb2ludHMpIHtcbiAgICBzb3J0ZWRCcmVha3BvaW50cy5icmVha3BvaW50cyA9IGNvbmZpZy5icmVha3BvaW50cy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIElNQUdFX0NPTkZJR19ERUZBVUxUUywgY29uZmlnLCBzb3J0ZWRCcmVha3BvaW50cyk7XG59XG5cbi8qKioqKiBBc3NlcnQgZnVuY3Rpb25zICoqKioqL1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlcmUgaXMgbm8gYHNyY2Agc2V0IG9uIGEgaG9zdCBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBhc3NlcnROb0NvbmZsaWN0aW5nU3JjKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBpZiAoZGlyLnNyYykge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLlVORVhQRUNURURfU1JDX0FUVFIsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IGJvdGggXFxgc3JjXFxgIGFuZCBcXGBuZ1NyY1xcYCBoYXZlIGJlZW4gc2V0LiBgICtcbiAgICAgICAgYFN1cHBseWluZyBib3RoIG9mIHRoZXNlIGF0dHJpYnV0ZXMgYnJlYWtzIGxhenkgbG9hZGluZy4gYCArXG4gICAgICAgIGBUaGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgc2V0cyBcXGBzcmNcXGAgaXRzZWxmIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBcXGBuZ1NyY1xcYC4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgcGxlYXNlIHJlbW92ZSB0aGUgXFxgc3JjXFxgIGF0dHJpYnV0ZS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZXJlIGlzIG5vIGBzcmNzZXRgIHNldCBvbiBhIGhvc3QgZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9Db25mbGljdGluZ1NyY3NldChkaXI6IE5nT3B0aW1pemVkSW1hZ2UpIHtcbiAgaWYgKGRpci5zcmNzZXQpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5VTkVYUEVDVEVEX1NSQ1NFVF9BVFRSLFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBib3RoIFxcYHNyY3NldFxcYCBhbmQgXFxgbmdTcmNzZXRcXGAgaGF2ZSBiZWVuIHNldC4gYCArXG4gICAgICAgIGBTdXBwbHlpbmcgYm90aCBvZiB0aGVzZSBhdHRyaWJ1dGVzIGJyZWFrcyBsYXp5IGxvYWRpbmcuIGAgK1xuICAgICAgICBgVGhlIE5nT3B0aW1pemVkSW1hZ2UgZGlyZWN0aXZlIHNldHMgXFxgc3Jjc2V0XFxgIGl0c2VsZiBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYCArXG4gICAgICAgIGBcXGBuZ1NyY3NldFxcYC4gVG8gZml4IHRoaXMsIHBsZWFzZSByZW1vdmUgdGhlIFxcYHNyY3NldFxcYCBhdHRyaWJ1dGUuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgYG5nU3JjYCBpcyBub3QgYSBCYXNlNjQtZW5jb2RlZCBpbWFnZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm90QmFzZTY0SW1hZ2UoZGlyOiBOZ09wdGltaXplZEltYWdlKSB7XG4gIGxldCBuZ1NyYyA9IGRpci5uZ1NyYy50cmltKCk7XG4gIGlmIChuZ1NyYy5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgaWYgKG5nU3JjLmxlbmd0aCA+IEJBU0U2NF9JTUdfTUFYX0xFTkdUSF9JTl9FUlJPUikge1xuICAgICAgbmdTcmMgPSBuZ1NyYy5zdWJzdHJpbmcoMCwgQkFTRTY0X0lNR19NQVhfTEVOR1RIX0lOX0VSUk9SKSArICcuLi4nO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMsIGZhbHNlKX0gXFxgbmdTcmNcXGAgaXMgYSBCYXNlNjQtZW5jb2RlZCBzdHJpbmcgYCArXG4gICAgICAgIGAoJHtuZ1NyY30pLiBOZ09wdGltaXplZEltYWdlIGRvZXMgbm90IHN1cHBvcnQgQmFzZTY0LWVuY29kZWQgc3RyaW5ncy4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgZGlzYWJsZSB0aGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgZm9yIHRoaXMgZWxlbWVudCBgICtcbiAgICAgICAgYGJ5IHJlbW92aW5nIFxcYG5nU3JjXFxgIGFuZCB1c2luZyBhIHN0YW5kYXJkIFxcYHNyY1xcYCBhdHRyaWJ1dGUgaW5zdGVhZC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSAnc2l6ZXMnIG9ubHkgaW5jbHVkZXMgcmVzcG9uc2l2ZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29tcGxleFNpemVzKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBsZXQgc2l6ZXMgPSBkaXIuc2l6ZXM7XG4gIGlmIChzaXplcz8ubWF0Y2goLygoXFwpfCwpXFxzfF4pXFxkK3B4LykpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMsIGZhbHNlKX0gXFxgc2l6ZXNcXGAgd2FzIHNldCB0byBhIHN0cmluZyBpbmNsdWRpbmcgYCArXG4gICAgICAgIGBwaXhlbCB2YWx1ZXMuIEZvciBhdXRvbWF0aWMgXFxgc3Jjc2V0XFxgIGdlbmVyYXRpb24sIFxcYHNpemVzXFxgIG11c3Qgb25seSBpbmNsdWRlIHJlc3BvbnNpdmUgYCArXG4gICAgICAgIGB2YWx1ZXMsIHN1Y2ggYXMgXFxgc2l6ZXM9XCI1MHZ3XCJcXGAgb3IgXFxgc2l6ZXM9XCIobWluLXdpZHRoOiA3NjhweCkgNTB2dywgMTAwdndcIlxcYC4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgbW9kaWZ5IHRoZSBcXGBzaXplc1xcYCBhdHRyaWJ1dGUsIG9yIHByb3ZpZGUgeW91ciBvd24gXFxgbmdTcmNzZXRcXGAgdmFsdWUgZGlyZWN0bHkuYCxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGxhY2Vob2xkZXIoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgYXNzZXJ0Tm9QbGFjZWhvbGRlckNvbmZpZ1dpdGhvdXRQbGFjZWhvbGRlcihkaXIpO1xuICBhc3NlcnROb1JlbGF0aXZlUGxhY2Vob2xkZXJXaXRob3V0TG9hZGVyKGRpciwgaW1hZ2VMb2FkZXIpO1xuICBhc3NlcnROb092ZXJzaXplZERhdGFVcmwoZGlyKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHBsYWNlaG9sZGVyQ29uZmlnIGlzbid0IGJlaW5nIHVzZWQgd2l0aG91dCBwbGFjZWhvbGRlclxuICovXG5mdW5jdGlvbiBhc3NlcnROb1BsYWNlaG9sZGVyQ29uZmlnV2l0aG91dFBsYWNlaG9sZGVyKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBpZiAoZGlyLnBsYWNlaG9sZGVyQ29uZmlnICYmICFkaXIucGxhY2Vob2xkZXIpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhcbiAgICAgICAgZGlyLm5nU3JjLFxuICAgICAgICBmYWxzZSxcbiAgICAgICl9IFxcYHBsYWNlaG9sZGVyQ29uZmlnXFxgIG9wdGlvbnMgd2VyZSBwcm92aWRlZCBmb3IgYW4gYCArXG4gICAgICAgIGBpbWFnZSB0aGF0IGRvZXMgbm90IHVzZSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlLCBhbmQgd2lsbCBoYXZlIG5vIGVmZmVjdC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBpZiBhIHJlbGF0aXZlIFVSTCBwbGFjZWhvbGRlciBpcyBzcGVjaWZpZWQsIGJ1dCBubyBsb2FkZXIgaXMgcHJlc2VudCB0byBwcm92aWRlIHRoZSBzbWFsbFxuICogaW1hZ2UuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vUmVsYXRpdmVQbGFjZWhvbGRlcldpdGhvdXRMb2FkZXIoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgaWYgKGRpci5wbGFjZWhvbGRlciA9PT0gdHJ1ZSAmJiBpbWFnZUxvYWRlciA9PT0gbm9vcEltYWdlTG9hZGVyKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuTUlTU0lOR19ORUNFU1NBUllfTE9BREVSLFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlIGJ1dCBgICtcbiAgICAgICAgYG5vIGltYWdlIGxvYWRlciBpcyBjb25maWd1cmVkIChpLmUuIHRoZSBkZWZhdWx0IG9uZSBpcyBiZWluZyB1c2VkKSwgYCArXG4gICAgICAgIGB3aGljaCB3b3VsZCByZXN1bHQgaW4gdGhlIHNhbWUgaW1hZ2UgYmVpbmcgdXNlZCBmb3IgdGhlIHByaW1hcnkgaW1hZ2UgYW5kIGl0cyBwbGFjZWhvbGRlci4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgcHJvdmlkZSBhIGxvYWRlciBvciByZW1vdmUgdGhlIFxcYHBsYWNlaG9sZGVyXFxgIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbWFnZS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBvciB0aHJvd3MgYW4gZXJyb3IgaWYgYW4gb3ZlcnNpemVkIGRhdGFVUkwgcGxhY2Vob2xkZXIgaXMgcHJvdmlkZWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vT3ZlcnNpemVkRGF0YVVybChkaXI6IE5nT3B0aW1pemVkSW1hZ2UpIHtcbiAgaWYgKFxuICAgIGRpci5wbGFjZWhvbGRlciAmJlxuICAgIHR5cGVvZiBkaXIucGxhY2Vob2xkZXIgPT09ICdzdHJpbmcnICYmXG4gICAgZGlyLnBsYWNlaG9sZGVyLnN0YXJ0c1dpdGgoJ2RhdGE6JylcbiAgKSB7XG4gICAgaWYgKGRpci5wbGFjZWhvbGRlci5sZW5ndGggPiBEQVRBX1VSTF9FUlJPUl9MSU1JVCkge1xuICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgICAgUnVudGltZUVycm9yQ29kZS5PVkVSU0laRURfUExBQ0VIT0xERVIsXG4gICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoXG4gICAgICAgICAgZGlyLm5nU3JjLFxuICAgICAgICApfSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlIGlzIHNldCB0byBhIGRhdGEgVVJMIHdoaWNoIGlzIGxvbmdlciBgICtcbiAgICAgICAgICBgdGhhbiAke0RBVEFfVVJMX0VSUk9SX0xJTUlUfSBjaGFyYWN0ZXJzLiBUaGlzIGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLCBhcyBsYXJnZSBpbmxpbmUgcGxhY2Vob2xkZXJzIGAgK1xuICAgICAgICAgIGBkaXJlY3RseSBpbmNyZWFzZSB0aGUgYnVuZGxlIHNpemUgb2YgQW5ndWxhciBhbmQgaHVydCBwYWdlIGxvYWQgcGVyZm9ybWFuY2UuIFRvIGZpeCB0aGlzLCBnZW5lcmF0ZSBgICtcbiAgICAgICAgICBgYSBzbWFsbGVyIGRhdGEgVVJMIHBsYWNlaG9sZGVyLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGlyLnBsYWNlaG9sZGVyLmxlbmd0aCA+IERBVEFfVVJMX1dBUk5fTElNSVQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICAgIFJ1bnRpbWVFcnJvckNvZGUuT1ZFUlNJWkVEX1BMQUNFSE9MREVSLFxuICAgICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoXG4gICAgICAgICAgICBkaXIubmdTcmMsXG4gICAgICAgICAgKX0gdGhlIFxcYHBsYWNlaG9sZGVyXFxgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYSBkYXRhIFVSTCB3aGljaCBpcyBsb25nZXIgYCArXG4gICAgICAgICAgICBgdGhhbiAke0RBVEFfVVJMX1dBUk5fTElNSVR9IGNoYXJhY3RlcnMuIFRoaXMgaXMgZGlzY291cmFnZWQsIGFzIGxhcmdlIGlubGluZSBwbGFjZWhvbGRlcnMgYCArXG4gICAgICAgICAgICBgZGlyZWN0bHkgaW5jcmVhc2UgdGhlIGJ1bmRsZSBzaXplIG9mIEFuZ3VsYXIgYW5kIGh1cnQgcGFnZSBsb2FkIHBlcmZvcm1hbmNlLiBGb3IgYmV0dGVyIGxvYWRpbmcgcGVyZm9ybWFuY2UsIGAgK1xuICAgICAgICAgICAgYGdlbmVyYXRlIGEgc21hbGxlciBkYXRhIFVSTCBwbGFjZWhvbGRlci5gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSBgbmdTcmNgIGlzIG5vdCBhIEJsb2IgVVJMLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb3RCbG9iVXJsKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBjb25zdCBuZ1NyYyA9IGRpci5uZ1NyYy50cmltKCk7XG4gIGlmIChuZ1NyYy5zdGFydHNXaXRoKCdibG9iOicpKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gXFxgbmdTcmNcXGAgd2FzIHNldCB0byBhIGJsb2IgVVJMICgke25nU3JjfSkuIGAgK1xuICAgICAgICBgQmxvYiBVUkxzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBOZ09wdGltaXplZEltYWdlIGRpcmVjdGl2ZS4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgZGlzYWJsZSB0aGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgZm9yIHRoaXMgZWxlbWVudCBgICtcbiAgICAgICAgYGJ5IHJlbW92aW5nIFxcYG5nU3JjXFxgIGFuZCB1c2luZyBhIHJlZ3VsYXIgXFxgc3JjXFxgIGF0dHJpYnV0ZSBpbnN0ZWFkLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGlucHV0IGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5SW5wdXQoZGlyOiBOZ09wdGltaXplZEltYWdlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgY29uc3QgaXNFbXB0eVN0cmluZyA9IGlzU3RyaW5nICYmIHZhbHVlLnRyaW0oKSA9PT0gJyc7XG4gIGlmICghaXNTdHJpbmcgfHwgaXNFbXB0eVN0cmluZykge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IFxcYCR7bmFtZX1cXGAgaGFzIGFuIGludmFsaWQgdmFsdWUgYCArXG4gICAgICAgIGAoXFxgJHt2YWx1ZX1cXGApLiBUbyBmaXggdGhpcywgY2hhbmdlIHRoZSB2YWx1ZSB0byBhIG5vbi1lbXB0eSBzdHJpbmcuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgYG5nU3Jjc2V0YCBpcyBpbiBhIHZhbGlkIGZvcm1hdCwgZS5nLiBcIjEwMHcsIDIwMHdcIiBvciBcIjF4LCAyeFwiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWROZ1NyY3NldChkaXI6IE5nT3B0aW1pemVkSW1hZ2UsIHZhbHVlOiB1bmtub3duKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47XG4gIGFzc2VydE5vbkVtcHR5SW5wdXQoZGlyLCAnbmdTcmNzZXQnLCB2YWx1ZSk7XG4gIGNvbnN0IHN0cmluZ1ZhbCA9IHZhbHVlIGFzIHN0cmluZztcbiAgY29uc3QgaXNWYWxpZFdpZHRoRGVzY3JpcHRvciA9IFZBTElEX1dJRFRIX0RFU0NSSVBUT1JfU1JDU0VULnRlc3Qoc3RyaW5nVmFsKTtcbiAgY29uc3QgaXNWYWxpZERlbnNpdHlEZXNjcmlwdG9yID0gVkFMSURfREVOU0lUWV9ERVNDUklQVE9SX1NSQ1NFVC50ZXN0KHN0cmluZ1ZhbCk7XG5cbiAgaWYgKGlzVmFsaWREZW5zaXR5RGVzY3JpcHRvcikge1xuICAgIGFzc2VydFVuZGVyRGVuc2l0eUNhcChkaXIsIHN0cmluZ1ZhbCk7XG4gIH1cblxuICBjb25zdCBpc1ZhbGlkU3Jjc2V0ID0gaXNWYWxpZFdpZHRoRGVzY3JpcHRvciB8fCBpc1ZhbGlkRGVuc2l0eURlc2NyaXB0b3I7XG4gIGlmICghaXNWYWxpZFNyY3NldCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IFxcYG5nU3Jjc2V0XFxgIGhhcyBhbiBpbnZhbGlkIHZhbHVlIChcXGAke3ZhbHVlfVxcYCkuIGAgK1xuICAgICAgICBgVG8gZml4IHRoaXMsIHN1cHBseSBcXGBuZ1NyY3NldFxcYCB1c2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG9uZSBvciBtb3JlIHdpZHRoIGAgK1xuICAgICAgICBgZGVzY3JpcHRvcnMgKGUuZy4gXCIxMDB3LCAyMDB3XCIpIG9yIGRlbnNpdHkgZGVzY3JpcHRvcnMgKGUuZy4gXCIxeCwgMnhcIikuYCxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFVuZGVyRGVuc2l0eUNhcChkaXI6IE5nT3B0aW1pemVkSW1hZ2UsIHZhbHVlOiBzdHJpbmcpIHtcbiAgY29uc3QgdW5kZXJEZW5zaXR5Q2FwID0gdmFsdWVcbiAgICAuc3BsaXQoJywnKVxuICAgIC5ldmVyeSgobnVtKSA9PiBudW0gPT09ICcnIHx8IHBhcnNlRmxvYXQobnVtKSA8PSBBQlNPTFVURV9TUkNTRVRfREVOU0lUWV9DQVApO1xuICBpZiAoIXVuZGVyRGVuc2l0eUNhcCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBcXGBuZ1NyY3NldFxcYCBjb250YWlucyBhbiB1bnN1cHBvcnRlZCBpbWFnZSBkZW5zaXR5OmAgK1xuICAgICAgICBgXFxgJHt2YWx1ZX1cXGAuIE5nT3B0aW1pemVkSW1hZ2UgZ2VuZXJhbGx5IHJlY29tbWVuZHMgYSBtYXggaW1hZ2UgZGVuc2l0eSBvZiBgICtcbiAgICAgICAgYCR7UkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQfXggYnV0IHN1cHBvcnRzIGltYWdlIGRlbnNpdGllcyB1cCB0byBgICtcbiAgICAgICAgYCR7QUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQfXguIFRoZSBodW1hbiBleWUgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gaW1hZ2UgZGVuc2l0aWVzIGAgK1xuICAgICAgICBgZ3JlYXRlciB0aGFuICR7UkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQfXggLSB3aGljaCBtYWtlcyB0aGVtIHVubmVjZXNzYXJ5IGZvciBgICtcbiAgICAgICAgYG1vc3QgdXNlIGNhc2VzLiBJbWFnZXMgdGhhdCB3aWxsIGJlIHBpbmNoLXpvb21lZCBhcmUgdHlwaWNhbGx5IHRoZSBwcmltYXJ5IHVzZSBjYXNlIGZvciBgICtcbiAgICAgICAgYCR7QUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQfXggaW1hZ2VzLiBQbGVhc2UgcmVtb3ZlIHRoZSBoaWdoIGRlbnNpdHkgZGVzY3JpcHRvciBhbmQgdHJ5IGFnYWluLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBgUnVudGltZUVycm9yYCBpbnN0YW5jZSB0byByZXByZXNlbnQgYSBzaXR1YXRpb24gd2hlbiBhbiBpbnB1dCBpcyBzZXQgYWZ0ZXJcbiAqIHRoZSBkaXJlY3RpdmUgaGFzIGluaXRpYWxpemVkLlxuICovXG5mdW5jdGlvbiBwb3N0SW5pdElucHV0Q2hhbmdlRXJyb3IoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbnB1dE5hbWU6IHN0cmluZyk6IHt9IHtcbiAgbGV0IHJlYXNvbiE6IHN0cmluZztcbiAgaWYgKGlucHV0TmFtZSA9PT0gJ3dpZHRoJyB8fCBpbnB1dE5hbWUgPT09ICdoZWlnaHQnKSB7XG4gICAgcmVhc29uID1cbiAgICAgIGBDaGFuZ2luZyBcXGAke2lucHV0TmFtZX1cXGAgbWF5IHJlc3VsdCBpbiBkaWZmZXJlbnQgYXR0cmlidXRlIHZhbHVlIGAgK1xuICAgICAgYGFwcGxpZWQgdG8gdGhlIHVuZGVybHlpbmcgaW1hZ2UgZWxlbWVudCBhbmQgY2F1c2UgbGF5b3V0IHNoaWZ0cyBvbiBhIHBhZ2UuYDtcbiAgfSBlbHNlIHtcbiAgICByZWFzb24gPVxuICAgICAgYENoYW5naW5nIHRoZSBcXGAke2lucHV0TmFtZX1cXGAgd291bGQgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHVuZGVybHlpbmcgYCArXG4gICAgICBgaW1hZ2UgZWxlbWVudCwgYmVjYXVzZSB0aGUgcmVzb3VyY2UgbG9hZGluZyBoYXMgYWxyZWFkeSBvY2N1cnJlZC5gO1xuICB9XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFJ1bnRpbWVFcnJvckNvZGUuVU5FWFBFQ1RFRF9JTlBVVF9DSEFOR0UsXG4gICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBcXGAke2lucHV0TmFtZX1cXGAgd2FzIHVwZGF0ZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIGAgK1xuICAgICAgYFRoZSBOZ09wdGltaXplZEltYWdlIGRpcmVjdGl2ZSB3aWxsIG5vdCByZWFjdCB0byB0aGlzIGlucHV0IGNoYW5nZS4gJHtyZWFzb259IGAgK1xuICAgICAgYFRvIGZpeCB0aGlzLCBlaXRoZXIgc3dpdGNoIFxcYCR7aW5wdXROYW1lfVxcYCB0byBhIHN0YXRpYyB2YWx1ZSBgICtcbiAgICAgIGBvciB3cmFwIHRoZSBpbWFnZSBlbGVtZW50IGluIGFuICpuZ0lmIHRoYXQgaXMgZ2F0ZWQgb24gdGhlIG5lY2Vzc2FyeSB2YWx1ZS5gLFxuICApO1xufVxuXG4vKipcbiAqIFZlcmlmeSB0aGF0IG5vbmUgb2YgdGhlIGxpc3RlZCBpbnB1dHMgaGFzIGNoYW5nZWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vUG9zdEluaXRJbnB1dENoYW5nZShcbiAgZGlyOiBOZ09wdGltaXplZEltYWdlLFxuICBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzLFxuICBpbnB1dHM6IHN0cmluZ1tdLFxuKSB7XG4gIGlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGlzVXBkYXRlZCA9IGNoYW5nZXMuaGFzT3duUHJvcGVydHkoaW5wdXQpO1xuICAgIGlmIChpc1VwZGF0ZWQgJiYgIWNoYW5nZXNbaW5wdXRdLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgaWYgKGlucHV0ID09PSAnbmdTcmMnKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIGBuZ1NyY2AgaW5wdXQgY2hhbmdlcywgd2UgZGV0ZWN0IHRoYXQgb25seSBpbiB0aGVcbiAgICAgICAgLy8gYG5nT25DaGFuZ2VzYCBob29rLCB0aHVzIHRoZSBgbmdTcmNgIGlzIGFscmVhZHkgc2V0LiBXZSB1c2VcbiAgICAgICAgLy8gYG5nU3JjYCBpbiB0aGUgZXJyb3IgbWVzc2FnZSwgc28gd2UgdXNlIGEgcHJldmlvdXMgdmFsdWUsIGJ1dFxuICAgICAgICAvLyBub3QgdGhlIHVwZGF0ZWQgb25lIGluIGl0LlxuICAgICAgICBkaXIgPSB7bmdTcmM6IGNoYW5nZXNbaW5wdXRdLnByZXZpb3VzVmFsdWV9IGFzIE5nT3B0aW1pemVkSW1hZ2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBwb3N0SW5pdElucHV0Q2hhbmdlRXJyb3IoZGlyLCBpbnB1dCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IGEgc3BlY2lmaWVkIGlucHV0IGlzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwLlxuICovXG5mdW5jdGlvbiBhc3NlcnRHcmVhdGVyVGhhblplcm8oZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbnB1dFZhbHVlOiB1bmtub3duLCBpbnB1dE5hbWU6IHN0cmluZykge1xuICBjb25zdCB2YWxpZE51bWJlciA9IHR5cGVvZiBpbnB1dFZhbHVlID09PSAnbnVtYmVyJyAmJiBpbnB1dFZhbHVlID4gMDtcbiAgY29uc3QgdmFsaWRTdHJpbmcgPVxuICAgIHR5cGVvZiBpbnB1dFZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KGlucHV0VmFsdWUudHJpbSgpKSAmJiBwYXJzZUludChpbnB1dFZhbHVlKSA+IDA7XG4gIGlmICghdmFsaWROdW1iZXIgJiYgIXZhbGlkU3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gXFxgJHtpbnB1dE5hbWV9XFxgIGhhcyBhbiBpbnZhbGlkIHZhbHVlLiBgICtcbiAgICAgICAgYFRvIGZpeCB0aGlzLCBwcm92aWRlIFxcYCR7aW5wdXROYW1lfVxcYCBhcyBhIG51bWJlciBncmVhdGVyIHRoYW4gMC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSByZW5kZXJlZCBpbWFnZSBpcyBub3QgdmlzdWFsbHkgZGlzdG9ydGVkLiBFZmZlY3RpdmVseSB0aGlzIGlzIGNoZWNraW5nOlxuICogLSBXaGV0aGVyIHRoZSBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYXR0cmlidXRlcyByZWZsZWN0IHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgaW1hZ2UuXG4gKiAtIFdoZXRoZXIgaW1hZ2Ugc3R5bGluZyBpcyBcImNvcnJlY3RcIiAoc2VlIGJlbG93IGZvciBhIGxvbmdlciBleHBsYW5hdGlvbikuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vSW1hZ2VEaXN0b3J0aW9uKFxuICBkaXI6IE5nT3B0aW1pemVkSW1hZ2UsXG4gIGltZzogSFRNTEltYWdlRWxlbWVudCxcbiAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbikge1xuICBjb25zdCByZW1vdmVMb2FkTGlzdGVuZXJGbiA9IHJlbmRlcmVyLmxpc3RlbihpbWcsICdsb2FkJywgKCkgPT4ge1xuICAgIHJlbW92ZUxvYWRMaXN0ZW5lckZuKCk7XG4gICAgcmVtb3ZlRXJyb3JMaXN0ZW5lckZuKCk7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGltZyk7XG4gICAgbGV0IHJlbmRlcmVkV2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnd2lkdGgnKSk7XG4gICAgbGV0IHJlbmRlcmVkSGVpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2hlaWdodCcpKTtcbiAgICBjb25zdCBib3hTaXppbmcgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcblxuICAgIGlmIChib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgICAgY29uc3QgcGFkZGluZ1RvcCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWxlZnQnKTtcbiAgICAgIHJlbmRlcmVkV2lkdGggLT0gcGFyc2VGbG9hdChwYWRkaW5nUmlnaHQpICsgcGFyc2VGbG9hdChwYWRkaW5nTGVmdCk7XG4gICAgICByZW5kZXJlZEhlaWdodCAtPSBwYXJzZUZsb2F0KHBhZGRpbmdUb3ApICsgcGFyc2VGbG9hdChwYWRkaW5nQm90dG9tKTtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJlZEFzcGVjdFJhdGlvID0gcmVuZGVyZWRXaWR0aCAvIHJlbmRlcmVkSGVpZ2h0O1xuICAgIGNvbnN0IG5vblplcm9SZW5kZXJlZERpbWVuc2lvbnMgPSByZW5kZXJlZFdpZHRoICE9PSAwICYmIHJlbmRlcmVkSGVpZ2h0ICE9PSAwO1xuXG4gICAgY29uc3QgaW50cmluc2ljV2lkdGggPSBpbWcubmF0dXJhbFdpZHRoO1xuICAgIGNvbnN0IGludHJpbnNpY0hlaWdodCA9IGltZy5uYXR1cmFsSGVpZ2h0O1xuICAgIGNvbnN0IGludHJpbnNpY0FzcGVjdFJhdGlvID0gaW50cmluc2ljV2lkdGggLyBpbnRyaW5zaWNIZWlnaHQ7XG5cbiAgICBjb25zdCBzdXBwbGllZFdpZHRoID0gZGlyLndpZHRoITtcbiAgICBjb25zdCBzdXBwbGllZEhlaWdodCA9IGRpci5oZWlnaHQhO1xuICAgIGNvbnN0IHN1cHBsaWVkQXNwZWN0UmF0aW8gPSBzdXBwbGllZFdpZHRoIC8gc3VwcGxpZWRIZWlnaHQ7XG5cbiAgICAvLyBUb2xlcmFuY2UgaXMgdXNlZCB0byBhY2NvdW50IGZvciB0aGUgaW1wYWN0IG9mIHN1YnBpeGVsIHJlbmRlcmluZy5cbiAgICAvLyBEdWUgdG8gc3VicGl4ZWwgcmVuZGVyaW5nLCB0aGUgcmVuZGVyZWQsIGludHJpbnNpYywgYW5kIHN1cHBsaWVkXG4gICAgLy8gYXNwZWN0IHJhdGlvcyBvZiBhIGNvcnJlY3RseSBjb25maWd1cmVkIGltYWdlIG1heSBub3QgZXhhY3RseSBtYXRjaC5cbiAgICAvLyBGb3IgZXhhbXBsZSwgYSBgd2lkdGg9NDAzMCBoZWlnaHQ9MzAyMGAgaW1hZ2UgbWlnaHQgaGF2ZSBhIHJlbmRlcmVkXG4gICAgLy8gc2l6ZSBvZiBcIjEwNjJ3LCA3OTYuNDhoXCIuIChBbiBhc3BlY3QgcmF0aW8gb2YgMS4zMzQuLi4gdnMuIDEuMzMzLi4uKVxuICAgIGNvbnN0IGluYWNjdXJhdGVEaW1lbnNpb25zID1cbiAgICAgIE1hdGguYWJzKHN1cHBsaWVkQXNwZWN0UmF0aW8gLSBpbnRyaW5zaWNBc3BlY3RSYXRpbykgPiBBU1BFQ1RfUkFUSU9fVE9MRVJBTkNFO1xuICAgIGNvbnN0IHN0eWxpbmdEaXN0b3J0aW9uID1cbiAgICAgIG5vblplcm9SZW5kZXJlZERpbWVuc2lvbnMgJiZcbiAgICAgIE1hdGguYWJzKGludHJpbnNpY0FzcGVjdFJhdGlvIC0gcmVuZGVyZWRBc3BlY3RSYXRpbykgPiBBU1BFQ1RfUkFUSU9fVE9MRVJBTkNFO1xuXG4gICAgaWYgKGluYWNjdXJhdGVEaW1lbnNpb25zKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSBpbWFnZSBkb2VzIG5vdCBtYXRjaCBgICtcbiAgICAgICAgICAgIGB0aGUgYXNwZWN0IHJhdGlvIGluZGljYXRlZCBieSB0aGUgd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzLiBgICtcbiAgICAgICAgICAgIGBcXG5JbnRyaW5zaWMgaW1hZ2Ugc2l6ZTogJHtpbnRyaW5zaWNXaWR0aH13IHggJHtpbnRyaW5zaWNIZWlnaHR9aCBgICtcbiAgICAgICAgICAgIGAoYXNwZWN0LXJhdGlvOiAke3JvdW5kKFxuICAgICAgICAgICAgICBpbnRyaW5zaWNBc3BlY3RSYXRpbyxcbiAgICAgICAgICAgICl9KS4gXFxuU3VwcGxpZWQgd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzOiBgICtcbiAgICAgICAgICAgIGAke3N1cHBsaWVkV2lkdGh9dyB4ICR7c3VwcGxpZWRIZWlnaHR9aCAoYXNwZWN0LXJhdGlvOiAke3JvdW5kKFxuICAgICAgICAgICAgICBzdXBwbGllZEFzcGVjdFJhdGlvLFxuICAgICAgICAgICAgKX0pLiBgICtcbiAgICAgICAgICAgIGBcXG5UbyBmaXggdGhpcywgdXBkYXRlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJpYnV0ZXMuYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChzdHlsaW5nRGlzdG9ydGlvbikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRSdW50aW1lRXJyb3IoXG4gICAgICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgcmVuZGVyZWQgaW1hZ2UgYCArXG4gICAgICAgICAgICBgZG9lcyBub3QgbWF0Y2ggdGhlIGltYWdlJ3MgaW50cmluc2ljIGFzcGVjdCByYXRpby4gYCArXG4gICAgICAgICAgICBgXFxuSW50cmluc2ljIGltYWdlIHNpemU6ICR7aW50cmluc2ljV2lkdGh9dyB4ICR7aW50cmluc2ljSGVpZ2h0fWggYCArXG4gICAgICAgICAgICBgKGFzcGVjdC1yYXRpbzogJHtyb3VuZChpbnRyaW5zaWNBc3BlY3RSYXRpbyl9KS4gXFxuUmVuZGVyZWQgaW1hZ2Ugc2l6ZTogYCArXG4gICAgICAgICAgICBgJHtyZW5kZXJlZFdpZHRofXcgeCAke3JlbmRlcmVkSGVpZ2h0fWggKGFzcGVjdC1yYXRpbzogYCArXG4gICAgICAgICAgICBgJHtyb3VuZChyZW5kZXJlZEFzcGVjdFJhdGlvKX0pLiBcXG5UaGlzIGlzc3VlIGNhbiBvY2N1ciBpZiBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYCArXG4gICAgICAgICAgICBgYXR0cmlidXRlcyBhcmUgYWRkZWQgdG8gYW4gaW1hZ2Ugd2l0aG91dCB1cGRhdGluZyB0aGUgY29ycmVzcG9uZGluZyBgICtcbiAgICAgICAgICAgIGBpbWFnZSBzdHlsaW5nLiBUbyBmaXggdGhpcywgYWRqdXN0IGltYWdlIHN0eWxpbmcuIEluIG1vc3QgY2FzZXMsIGAgK1xuICAgICAgICAgICAgYGFkZGluZyBcImhlaWdodDogYXV0b1wiIG9yIFwid2lkdGg6IGF1dG9cIiB0byB0aGUgaW1hZ2Ugc3R5bGluZyB3aWxsIGZpeCBgICtcbiAgICAgICAgICAgIGB0aGlzIGlzc3VlLmAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWRpci5uZ1NyY3NldCAmJiBub25aZXJvUmVuZGVyZWREaW1lbnNpb25zKSB7XG4gICAgICAvLyBJZiBgbmdTcmNzZXRgIGhhc24ndCBiZWVuIHNldCwgc2FuaXR5IGNoZWNrIHRoZSBpbnRyaW5zaWMgc2l6ZS5cbiAgICAgIGNvbnN0IHJlY29tbWVuZGVkV2lkdGggPSBSRUNPTU1FTkRFRF9TUkNTRVRfREVOU0lUWV9DQVAgKiByZW5kZXJlZFdpZHRoO1xuICAgICAgY29uc3QgcmVjb21tZW5kZWRIZWlnaHQgPSBSRUNPTU1FTkRFRF9TUkNTRVRfREVOU0lUWV9DQVAgKiByZW5kZXJlZEhlaWdodDtcbiAgICAgIGNvbnN0IG92ZXJzaXplZFdpZHRoID0gaW50cmluc2ljV2lkdGggLSByZWNvbW1lbmRlZFdpZHRoID49IE9WRVJTSVpFRF9JTUFHRV9UT0xFUkFOQ0U7XG4gICAgICBjb25zdCBvdmVyc2l6ZWRIZWlnaHQgPSBpbnRyaW5zaWNIZWlnaHQgLSByZWNvbW1lbmRlZEhlaWdodCA+PSBPVkVSU0laRURfSU1BR0VfVE9MRVJBTkNFO1xuICAgICAgaWYgKG92ZXJzaXplZFdpZHRoIHx8IG92ZXJzaXplZEhlaWdodCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICAgICAgUnVudGltZUVycm9yQ29kZS5PVkVSU0laRURfSU1BR0UsXG4gICAgICAgICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBpbnRyaW5zaWMgaW1hZ2UgaXMgc2lnbmlmaWNhbnRseSBgICtcbiAgICAgICAgICAgICAgYGxhcmdlciB0aGFuIG5lY2Vzc2FyeS4gYCArXG4gICAgICAgICAgICAgIGBcXG5SZW5kZXJlZCBpbWFnZSBzaXplOiAke3JlbmRlcmVkV2lkdGh9dyB4ICR7cmVuZGVyZWRIZWlnaHR9aC4gYCArXG4gICAgICAgICAgICAgIGBcXG5JbnRyaW5zaWMgaW1hZ2Ugc2l6ZTogJHtpbnRyaW5zaWNXaWR0aH13IHggJHtpbnRyaW5zaWNIZWlnaHR9aC4gYCArXG4gICAgICAgICAgICAgIGBcXG5SZWNvbW1lbmRlZCBpbnRyaW5zaWMgaW1hZ2Ugc2l6ZTogJHtyZWNvbW1lbmRlZFdpZHRofXcgeCAke3JlY29tbWVuZGVkSGVpZ2h0fWguIGAgK1xuICAgICAgICAgICAgICBgXFxuTm90ZTogUmVjb21tZW5kZWQgaW50cmluc2ljIGltYWdlIHNpemUgaXMgY2FsY3VsYXRlZCBhc3N1bWluZyBhIG1heGltdW0gRFBSIG9mIGAgK1xuICAgICAgICAgICAgICBgJHtSRUNPTU1FTkRFRF9TUkNTRVRfREVOU0lUWV9DQVB9LiBUbyBpbXByb3ZlIGxvYWRpbmcgdGltZSwgcmVzaXplIHRoZSBpbWFnZSBgICtcbiAgICAgICAgICAgICAgYG9yIGNvbnNpZGVyIHVzaW5nIHRoZSBcIm5nU3Jjc2V0XCIgYW5kIFwic2l6ZXNcIiBhdHRyaWJ1dGVzLmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIFdlIG9ubHkgbGlzdGVuIHRvIHRoZSBgZXJyb3JgIGV2ZW50IHRvIHJlbW92ZSB0aGUgYGxvYWRgIGV2ZW50IGxpc3RlbmVyIGJlY2F1c2UgaXQgd2lsbCBub3QgYmVcbiAgLy8gZmlyZWQgaWYgdGhlIGltYWdlIGZhaWxzIHRvIGxvYWQuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBkZXZlbG9wbWVudCBtb2RlXG4gIC8vIGJlY2F1c2UgaW1hZ2UgZWxlbWVudHMgYXJlbid0IGdhcmJhZ2UtY29sbGVjdGVkIHByb3Blcmx5LiBJdCBoYXBwZW5zIGJlY2F1c2Ugem9uZS5qcyBzdG9yZXMgdGhlXG4gIC8vIGV2ZW50IGxpc3RlbmVyIGRpcmVjdGx5IG9uIHRoZSBlbGVtZW50IGFuZCBjbG9zdXJlcyBjYXB0dXJlIGBkaXJgLlxuICBjb25zdCByZW1vdmVFcnJvckxpc3RlbmVyRm4gPSByZW5kZXJlci5saXN0ZW4oaW1nLCAnZXJyb3InLCAoKSA9PiB7XG4gICAgcmVtb3ZlTG9hZExpc3RlbmVyRm4oKTtcbiAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCBhIHNwZWNpZmllZCBpbnB1dCBpcyBzZXQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5V2lkdGhBbmRIZWlnaHQoZGlyOiBOZ09wdGltaXplZEltYWdlKSB7XG4gIGxldCBtaXNzaW5nQXR0cmlidXRlcyA9IFtdO1xuICBpZiAoZGlyLndpZHRoID09PSB1bmRlZmluZWQpIG1pc3NpbmdBdHRyaWJ1dGVzLnB1c2goJ3dpZHRoJyk7XG4gIGlmIChkaXIuaGVpZ2h0ID09PSB1bmRlZmluZWQpIG1pc3NpbmdBdHRyaWJ1dGVzLnB1c2goJ2hlaWdodCcpO1xuICBpZiAobWlzc2luZ0F0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLlJFUVVJUkVEX0lOUFVUX01JU1NJTkcsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZXNlIHJlcXVpcmVkIGF0dHJpYnV0ZXMgYCArXG4gICAgICAgIGBhcmUgbWlzc2luZzogJHttaXNzaW5nQXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGBcIiR7YXR0cn1cImApLmpvaW4oJywgJyl9LiBgICtcbiAgICAgICAgYEluY2x1ZGluZyBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYXR0cmlidXRlcyB3aWxsIHByZXZlbnQgaW1hZ2UtcmVsYXRlZCBsYXlvdXQgc2hpZnRzLiBgICtcbiAgICAgICAgYFRvIGZpeCB0aGlzLCBpbmNsdWRlIFwid2lkdGhcIiBhbmQgXCJoZWlnaHRcIiBhdHRyaWJ1dGVzIG9uIHRoZSBpbWFnZSB0YWcgb3IgdHVybiBvbiBgICtcbiAgICAgICAgYFwiZmlsbFwiIG1vZGUgd2l0aCB0aGUgXFxgZmlsbFxcYCBhdHRyaWJ1dGUuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBub3Qgc2V0LiBVc2VkIGluIGZpbGwgbW9kZSwgd2hlcmUgdGhvc2UgYXR0cmlidXRlcyBkb24ndCBtYWtlXG4gKiBzZW5zZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0RW1wdHlXaWR0aEFuZEhlaWdodChkaXI6IE5nT3B0aW1pemVkSW1hZ2UpIHtcbiAgaWYgKGRpci53aWR0aCB8fCBkaXIuaGVpZ2h0KSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIGF0dHJpYnV0ZXMgXFxgaGVpZ2h0XFxgIGFuZC9vciBcXGB3aWR0aFxcYCBhcmUgcHJlc2VudCBgICtcbiAgICAgICAgYGFsb25nIHdpdGggdGhlIFxcYGZpbGxcXGAgYXR0cmlidXRlLiBCZWNhdXNlIFxcYGZpbGxcXGAgbW9kZSBjYXVzZXMgYW4gaW1hZ2UgdG8gZmlsbCBpdHMgY29udGFpbmluZyBgICtcbiAgICAgICAgYGVsZW1lbnQsIHRoZSBzaXplIGF0dHJpYnV0ZXMgaGF2ZSBubyBlZmZlY3QgYW5kIHNob3VsZCBiZSByZW1vdmVkLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIHJlbmRlcmVkIGltYWdlIGhhcyBhIG5vbnplcm8gaGVpZ2h0LiBJZiB0aGUgaW1hZ2UgaXMgaW4gZmlsbCBtb2RlLCBwcm92aWRlc1xuICogZ3VpZGFuY2UgdGhhdCB0aGlzIGNhbiBiZSBjYXVzZWQgYnkgdGhlIGNvbnRhaW5pbmcgZWxlbWVudCdzIENTUyBwb3NpdGlvbiBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9uWmVyb1JlbmRlcmVkSGVpZ2h0KFxuICBkaXI6IE5nT3B0aW1pemVkSW1hZ2UsXG4gIGltZzogSFRNTEltYWdlRWxlbWVudCxcbiAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbikge1xuICBjb25zdCByZW1vdmVMb2FkTGlzdGVuZXJGbiA9IHJlbmRlcmVyLmxpc3RlbihpbWcsICdsb2FkJywgKCkgPT4ge1xuICAgIHJlbW92ZUxvYWRMaXN0ZW5lckZuKCk7XG4gICAgcmVtb3ZlRXJyb3JMaXN0ZW5lckZuKCk7XG4gICAgY29uc3QgcmVuZGVyZWRIZWlnaHQgPSBpbWcuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChkaXIuZmlsbCAmJiByZW5kZXJlZEhlaWdodCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRSdW50aW1lRXJyb3IoXG4gICAgICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIGhlaWdodCBvZiB0aGUgZmlsbC1tb2RlIGltYWdlIGlzIHplcm8uIGAgK1xuICAgICAgICAgICAgYFRoaXMgaXMgbGlrZWx5IGJlY2F1c2UgdGhlIGNvbnRhaW5pbmcgZWxlbWVudCBkb2VzIG5vdCBoYXZlIHRoZSBDU1MgJ3Bvc2l0aW9uJyBgICtcbiAgICAgICAgICAgIGBwcm9wZXJ0eSBzZXQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6IFwicmVsYXRpdmVcIiwgXCJmaXhlZFwiLCBvciBcImFic29sdXRlXCIuIGAgK1xuICAgICAgICAgICAgYFRvIGZpeCB0aGlzIHByb2JsZW0sIG1ha2Ugc3VyZSB0aGUgY29udGFpbmVyIGVsZW1lbnQgaGFzIHRoZSBDU1MgJ3Bvc2l0aW9uJyBgICtcbiAgICAgICAgICAgIGBwcm9wZXJ0eSBkZWZpbmVkIGFuZCB0aGUgaGVpZ2h0IG9mIHRoZSBlbGVtZW50IGlzIG5vdCB6ZXJvLmAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2VlIGNvbW1lbnRzIGluIHRoZSBgYXNzZXJ0Tm9JbWFnZURpc3RvcnRpb25gLlxuICBjb25zdCByZW1vdmVFcnJvckxpc3RlbmVyRm4gPSByZW5kZXJlci5saXN0ZW4oaW1nLCAnZXJyb3InLCAoKSA9PiB7XG4gICAgcmVtb3ZlTG9hZExpc3RlbmVyRm4oKTtcbiAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgYGxvYWRpbmdgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYSB2YWxpZCBpbnB1dCAmXG4gKiBpcyBub3QgdXNlZCBvbiBwcmlvcml0eSBpbWFnZXMuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFZhbGlkTG9hZGluZ0lucHV0KGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBpZiAoZGlyLmxvYWRpbmcgJiYgZGlyLnByaW9yaXR5KSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYGxvYWRpbmdcXGAgYXR0cmlidXRlIGAgK1xuICAgICAgICBgd2FzIHVzZWQgb24gYW4gaW1hZ2UgdGhhdCB3YXMgbWFya2VkIFwicHJpb3JpdHlcIi4gYCArXG4gICAgICAgIGBTZXR0aW5nIFxcYGxvYWRpbmdcXGAgb24gcHJpb3JpdHkgaW1hZ2VzIGlzIG5vdCBhbGxvd2VkIGAgK1xuICAgICAgICBgYmVjYXVzZSB0aGVzZSBpbWFnZXMgd2lsbCBhbHdheXMgYmUgZWFnZXJseSBsb2FkZWQuIGAgK1xuICAgICAgICBgVG8gZml4IHRoaXMsIHJlbW92ZSB0aGUg4oCcbG9hZGluZ+KAnSBhdHRyaWJ1dGUgZnJvbSB0aGUgcHJpb3JpdHkgaW1hZ2UuYCxcbiAgICApO1xuICB9XG4gIGNvbnN0IHZhbGlkSW5wdXRzID0gWydhdXRvJywgJ2VhZ2VyJywgJ2xhenknXTtcbiAgaWYgKHR5cGVvZiBkaXIubG9hZGluZyA9PT0gJ3N0cmluZycgJiYgIXZhbGlkSW5wdXRzLmluY2x1ZGVzKGRpci5sb2FkaW5nKSkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBcXGBsb2FkaW5nXFxgIGF0dHJpYnV0ZSBgICtcbiAgICAgICAgYGhhcyBhbiBpbnZhbGlkIHZhbHVlIChcXGAke2Rpci5sb2FkaW5nfVxcYCkuIGAgK1xuICAgICAgICBgVG8gZml4IHRoaXMsIHByb3ZpZGUgYSB2YWxpZCB2YWx1ZSAoXCJsYXp5XCIsIFwiZWFnZXJcIiwgb3IgXCJhdXRvXCIpLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhcm5zIGlmIE5PVCB1c2luZyBhIGxvYWRlciAoZmFsbGluZyBiYWNrIHRvIHRoZSBnZW5lcmljIGxvYWRlcikgYW5kXG4gKiB0aGUgaW1hZ2UgYXBwZWFycyB0byBiZSBob3N0ZWQgb24gb25lIG9mIHRoZSBpbWFnZSBDRE5zIGZvciB3aGljaFxuICogd2UgZG8gaGF2ZSBhIGJ1aWx0LWluIGltYWdlIGxvYWRlci4gU3VnZ2VzdHMgc3dpdGNoaW5nIHRvIHRoZVxuICogYnVpbHQtaW4gbG9hZGVyLlxuICpcbiAqIEBwYXJhbSBuZ1NyYyBWYWx1ZSBvZiB0aGUgbmdTcmMgYXR0cmlidXRlXG4gKiBAcGFyYW0gaW1hZ2VMb2FkZXIgSW1hZ2VMb2FkZXIgcHJvdmlkZWRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm90TWlzc2luZ0J1aWx0SW5Mb2FkZXIobmdTcmM6IHN0cmluZywgaW1hZ2VMb2FkZXI6IEltYWdlTG9hZGVyKSB7XG4gIGlmIChpbWFnZUxvYWRlciA9PT0gbm9vcEltYWdlTG9hZGVyKSB7XG4gICAgbGV0IGJ1aWx0SW5Mb2FkZXJOYW1lID0gJyc7XG4gICAgZm9yIChjb25zdCBsb2FkZXIgb2YgQlVJTFRfSU5fTE9BREVSUykge1xuICAgICAgaWYgKGxvYWRlci50ZXN0VXJsKG5nU3JjKSkge1xuICAgICAgICBidWlsdEluTG9hZGVyTmFtZSA9IGxvYWRlci5uYW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGJ1aWx0SW5Mb2FkZXJOYW1lKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICBSdW50aW1lRXJyb3JDb2RlLk1JU1NJTkdfQlVJTFRJTl9MT0FERVIsXG4gICAgICAgICAgYE5nT3B0aW1pemVkSW1hZ2U6IEl0IGxvb2tzIGxpa2UgeW91ciBpbWFnZXMgbWF5IGJlIGhvc3RlZCBvbiB0aGUgYCArXG4gICAgICAgICAgICBgJHtidWlsdEluTG9hZGVyTmFtZX0gQ0ROLCBidXQgeW91ciBhcHAgaXMgbm90IHVzaW5nIEFuZ3VsYXIncyBgICtcbiAgICAgICAgICAgIGBidWlsdC1pbiBsb2FkZXIgZm9yIHRoYXQgQ0ROLiBXZSByZWNvbW1lbmQgc3dpdGNoaW5nIHRvIHVzZSBgICtcbiAgICAgICAgICAgIGB0aGUgYnVpbHQtaW4gYnkgY2FsbGluZyBcXGBwcm92aWRlJHtidWlsdEluTG9hZGVyTmFtZX1Mb2FkZXIoKVxcYCBgICtcbiAgICAgICAgICAgIGBpbiB5b3VyIFxcYHByb3ZpZGVyc1xcYCBhbmQgcGFzc2luZyBpdCB5b3VyIGluc3RhbmNlJ3MgYmFzZSBVUkwuIGAgK1xuICAgICAgICAgICAgYElmIHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGUgYnVpbHQtaW4gbG9hZGVyLCBkZWZpbmUgYSBjdXN0b20gYCArXG4gICAgICAgICAgICBgbG9hZGVyIGZ1bmN0aW9uIHVzaW5nIElNQUdFX0xPQURFUiB0byBzaWxlbmNlIHRoaXMgd2FybmluZy5gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBpZiBuZ1NyY3NldCBpcyBwcmVzZW50IGFuZCBubyBsb2FkZXIgaXMgY29uZmlndXJlZCAoaS5lLiB0aGUgZGVmYXVsdCBvbmUgaXMgYmVpbmcgdXNlZCkuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vTmdTcmNzZXRXaXRob3V0TG9hZGVyKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSwgaW1hZ2VMb2FkZXI6IEltYWdlTG9hZGVyKSB7XG4gIGlmIChkaXIubmdTcmNzZXQgJiYgaW1hZ2VMb2FkZXIgPT09IG5vb3BJbWFnZUxvYWRlcikge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgUnVudGltZUVycm9yQ29kZS5NSVNTSU5HX05FQ0VTU0FSWV9MT0FERVIsXG4gICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYG5nU3Jjc2V0XFxgIGF0dHJpYnV0ZSBpcyBwcmVzZW50IGJ1dCBgICtcbiAgICAgICAgICBgbm8gaW1hZ2UgbG9hZGVyIGlzIGNvbmZpZ3VyZWQgKGkuZS4gdGhlIGRlZmF1bHQgb25lIGlzIGJlaW5nIHVzZWQpLCBgICtcbiAgICAgICAgICBgd2hpY2ggd291bGQgcmVzdWx0IGluIHRoZSBzYW1lIGltYWdlIGJlaW5nIHVzZWQgZm9yIGFsbCBjb25maWd1cmVkIHNpemVzLiBgICtcbiAgICAgICAgICBgVG8gZml4IHRoaXMsIHByb3ZpZGUgYSBsb2FkZXIgb3IgcmVtb3ZlIHRoZSBcXGBuZ1NyY3NldFxcYCBhdHRyaWJ1dGUgZnJvbSB0aGUgaW1hZ2UuYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhcm5zIGlmIGxvYWRlclBhcmFtcyBpcyBwcmVzZW50IGFuZCBubyBsb2FkZXIgaXMgY29uZmlndXJlZCAoaS5lLiB0aGUgZGVmYXVsdCBvbmUgaXMgYmVpbmdcbiAqIHVzZWQpLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb0xvYWRlclBhcmFtc1dpdGhvdXRMb2FkZXIoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgaWYgKGRpci5sb2FkZXJQYXJhbXMgJiYgaW1hZ2VMb2FkZXIgPT09IG5vb3BJbWFnZUxvYWRlcikge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgUnVudGltZUVycm9yQ29kZS5NSVNTSU5HX05FQ0VTU0FSWV9MT0FERVIsXG4gICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYGxvYWRlclBhcmFtc1xcYCBhdHRyaWJ1dGUgaXMgcHJlc2VudCBidXQgYCArXG4gICAgICAgICAgYG5vIGltYWdlIGxvYWRlciBpcyBjb25maWd1cmVkIChpLmUuIHRoZSBkZWZhdWx0IG9uZSBpcyBiZWluZyB1c2VkKSwgYCArXG4gICAgICAgICAgYHdoaWNoIG1lYW5zIHRoYXQgdGhlIGxvYWRlclBhcmFtcyBkYXRhIHdpbGwgbm90IGJlIGNvbnN1bWVkIGFuZCB3aWxsIG5vdCBhZmZlY3QgdGhlIFVSTC4gYCArXG4gICAgICAgICAgYFRvIGZpeCB0aGlzLCBwcm92aWRlIGEgY3VzdG9tIGxvYWRlciBvciByZW1vdmUgdGhlIFxcYGxvYWRlclBhcmFtc1xcYCBhdHRyaWJ1dGUgZnJvbSB0aGUgaW1hZ2UuYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhcm5zIGlmIHRoZSBwcmlvcml0eSBhdHRyaWJ1dGUgaXMgdXNlZCB0b28gb2Z0ZW4gb24gcGFnZSBsb2FkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFzc2V0UHJpb3JpdHlDb3VudEJlbG93VGhyZXNob2xkKGFwcFJlZjogQXBwbGljYXRpb25SZWYpIHtcbiAgaWYgKElNR1NfV0lUSF9QUklPUklUWV9BVFRSX0NPVU5UID09PSAwKSB7XG4gICAgSU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlQrKztcbiAgICBhd2FpdCB3aGVuU3RhYmxlKGFwcFJlZik7XG4gICAgaWYgKElNR1NfV0lUSF9QUklPUklUWV9BVFRSX0NPVU5UID4gUFJJT1JJVFlfQ09VTlRfVEhSRVNIT0xEKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICBSdW50aW1lRXJyb3JDb2RlLlRPT19NQU5ZX1BSSU9SSVRZX0FUVFJJQlVURVMsXG4gICAgICAgICAgYE5nT3B0aW1pemVkSW1hZ2U6IFRoZSBcInByaW9yaXR5XCIgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlIG1vcmUgdGhhbiAke1BSSU9SSVRZX0NPVU5UX1RIUkVTSE9MRH0gdGltZXMgKCR7SU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlR9IHRpbWVzKS4gYCArXG4gICAgICAgICAgICBgTWFya2luZyB0b28gbWFueSBpbWFnZXMgYXMgXCJoaWdoXCIgcHJpb3JpdHkgY2FuIGh1cnQgeW91ciBhcHBsaWNhdGlvbidzIExDUCAoaHR0cHM6Ly93ZWIuZGV2L2xjcCkuIGAgK1xuICAgICAgICAgICAgYFwiUHJpb3JpdHlcIiBzaG91bGQgb25seSBiZSBzZXQgb24gdGhlIGltYWdlIGV4cGVjdGVkIHRvIGJlIHRoZSBwYWdlJ3MgTENQIGVsZW1lbnQuYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIElNR1NfV0lUSF9QUklPUklUWV9BVFRSX0NPVU5UKys7XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBpZiBwbGFjZWhvbGRlcidzIGRpbWVuc2lvbiBhcmUgb3ZlciBhIHRocmVzaG9sZC5cbiAqXG4gKiBUaGlzIGFzc2VydCBmdW5jdGlvbiBpcyBtZWFudCB0byBvbmx5IHJ1biBvbiB0aGUgYnJvd3Nlci5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UGxhY2Vob2xkZXJEaW1lbnNpb25zKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSwgaW1nRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCkge1xuICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaW1nRWxlbWVudCk7XG4gIGxldCByZW5kZXJlZFdpZHRoID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3dpZHRoJykpO1xuICBsZXQgcmVuZGVyZWRIZWlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0JykpO1xuXG4gIGlmIChyZW5kZXJlZFdpZHRoID4gUExBQ0VIT0xERVJfRElNRU5TSU9OX0xJTUlUIHx8IHJlbmRlcmVkSGVpZ2h0ID4gUExBQ0VIT0xERVJfRElNRU5TSU9OX0xJTUlUKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICBSdW50aW1lRXJyb3JDb2RlLlBMQUNFSE9MREVSX0RJTUVOU0lPTl9MSU1JVF9FWENFRURFRCxcbiAgICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBpdCB1c2VzIGEgcGxhY2Vob2xkZXIgaW1hZ2UsIGJ1dCBhdCBsZWFzdCBvbmUgYCArXG4gICAgICAgICAgYG9mIHRoZSBkaW1lbnNpb25zIGF0dHJpYnV0ZSAoaGVpZ2h0IG9yIHdpZHRoKSBleGNlZWRzIHRoZSBsaW1pdCBvZiAke1BMQUNFSE9MREVSX0RJTUVOU0lPTl9MSU1JVH1weC4gYCArXG4gICAgICAgICAgYFRvIGZpeCB0aGlzLCB1c2UgYSBzbWFsbGVyIGltYWdlIGFzIGEgcGxhY2Vob2xkZXIuYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByb3VuZChpbnB1dDogbnVtYmVyKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoaW5wdXQpID8gaW5wdXQgOiBpbnB1dC50b0ZpeGVkKDIpO1xufVxuXG4vLyBUcmFuc2Zvcm0gZnVuY3Rpb24gdG8gaGFuZGxlIFNhZmVWYWx1ZSBpbnB1dCBmb3IgbmdTcmMuIFRoaXMgZG9lc24ndCBkbyBhbnkgc2FuaXRpemF0aW9uLFxuLy8gYXMgdGhhdCBpcyBub3QgbmVlZGVkIGZvciBpbWcuc3JjIGFuZCBpbWcuc3Jjc2V0LiBUaGlzIHRyYW5zZm9ybSBpcyBwdXJlbHkgZm9yIGNvbXBhdGliaWxpdHkuXG5mdW5jdGlvbiB1bndyYXBTYWZlVXJsKHZhbHVlOiBzdHJpbmcgfCBTYWZlVmFsdWUpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdW53cmFwU2FmZVZhbHVlKHZhbHVlKTtcbn1cblxuLy8gVHJhbnNmb3JtIGZ1bmN0aW9uIHRvIGhhbmRsZSBpbnB1dHMgd2hpY2ggbWF5IGJlIGJvb2xlYW5zLCBzdHJpbmdzLCBvciBzdHJpbmcgcmVwcmVzZW50YXRpb25zXG4vLyBvZiBib29sZWFuIHZhbHVlcy4gVXNlZCBmb3IgdGhlIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZS5cbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuT3JVcmxBdHRyaWJ1dGUodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpOiBib29sZWFuIHwgc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICd0cnVlJyAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJyAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGJvb2xlYW5BdHRyaWJ1dGUodmFsdWUpO1xufVxuIl19
|
|
1055
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdfb3B0aW1pemVkX2ltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9kaXJlY3RpdmVzL25nX29wdGltaXplZF9pbWFnZS9uZ19vcHRpbWl6ZWRfaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixlQUFlLEVBSWYsV0FBVyxFQUNYLFNBQVMsRUFFVCxtQkFBbUIsSUFBSSxrQkFBa0IsRUFDekMsYUFBYSxJQUFJLFlBQVksRUFDN0Isc0JBQXNCLElBQUkscUJBQXFCLEVBRS9DLHVCQUF1QixJQUFJLHNCQUFzQixFQUNqRCxhQUFhLElBQUksWUFBWSxFQUU3QixnQkFBZ0IsSUFBSSxlQUFlLEVBQ25DLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsV0FBVyxJQUFJLFVBQVUsR0FDMUIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUNMLFlBQVksRUFHWixlQUFlLEdBQ2hCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9B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QXFCLEVBQUUsUUFBc0I7SUFDOUUsZ0ZBQWdGO0lBQ2hGLHdGQUF3RjtJQUN4Riw0RUFBNEU7SUFDNUUsOEVBQThFO0lBQzlFLGdFQUFnRTtJQUNoRSwyRUFBMkU7SUFDM0UsMEZBQTBGO0lBQzFGLGtGQUFrRjtJQUNsRixnRkFBZ0Y7SUFDaEYscURBQXFEO0lBQ3JELElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckMsUUFBUSxFQUFFLENBQUM7SUFDYixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLEtBQWE7SUFDMUIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELDRGQUE0RjtBQUM1RixnR0FBZ0c7QUFDaEcsU0FBUyxhQUFhLENBQUMsS0FBeUI7SUFDOUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsZ0dBQWdHO0FBQ2hHLHlEQUF5RDtBQUN6RCxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBdUI7SUFDM0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUssT0FBTyxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN2RixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5kZXYvbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBQTEFURk9STV9JRCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICDJtWZvcm1hdFJ1bnRpbWVFcnJvciBhcyBmb3JtYXRSdW50aW1lRXJyb3IsXG4gIMm1SU1BR0VfQ09ORklHIGFzIElNQUdFX0NPTkZJRyxcbiAgybVJTUFHRV9DT05GSUdfREVGQVVMVFMgYXMgSU1BR0VfQ09ORklHX0RFRkFVTFRTLFxuICDJtUltYWdlQ29uZmlnIGFzIEltYWdlQ29uZmlnLFxuICDJtXBlcmZvcm1hbmNlTWFya0ZlYXR1cmUgYXMgcGVyZm9ybWFuY2VNYXJrRmVhdHVyZSxcbiAgybVSdW50aW1lRXJyb3IgYXMgUnVudGltZUVycm9yLFxuICDJtVNhZmVWYWx1ZSBhcyBTYWZlVmFsdWUsXG4gIMm1dW53cmFwU2FmZVZhbHVlIGFzIHVud3JhcFNhZmVWYWx1ZSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEFwcGxpY2F0aW9uUmVmLFxuICDJtXdoZW5TdGFibGUgYXMgd2hlblN0YWJsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7UnVudGltZUVycm9yQ29kZX0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7aXNQbGF0Zm9ybVNlcnZlcn0gZnJvbSAnLi4vLi4vcGxhdGZvcm1faWQnO1xuXG5pbXBvcnQge2ltZ0RpcmVjdGl2ZURldGFpbHN9IGZyb20gJy4vZXJyb3JfaGVscGVyJztcbmltcG9ydCB7Y2xvdWRpbmFyeUxvYWRlckluZm99IGZyb20gJy4vaW1hZ2VfbG9hZGVycy9jbG91ZGluYXJ5X2xvYWRlcic7XG5pbXBvcnQge1xuICBJTUFHRV9MT0FERVIsXG4gIEltYWdlTG9hZGVyLFxuICBJbWFnZUxvYWRlckNvbmZpZyxcbiAgbm9vcEltYWdlTG9hZGVyLFxufSBmcm9tICcuL2ltYWdlX2xvYWRlcnMvaW1hZ2VfbG9hZGVyJztcbmltcG9ydCB7aW1hZ2VLaXRMb2FkZXJJbmZvfSBmcm9tICcuL2ltYWdlX2xvYWRlcnMvaW1hZ2VraXRfbG9hZGVyJztcbmltcG9ydCB7aW1naXhMb2FkZXJJbmZvfSBmcm9tICcuL2ltYWdlX2xvYWRlcnMvaW1naXhfbG9hZGVyJztcbmltcG9ydCB7bmV0bGlmeUxvYWRlckluZm99IGZyb20gJy4vaW1hZ2VfbG9hZGVycy9uZXRsaWZ5X2xvYWRlcic7XG5pbXBvcnQge0xDUEltYWdlT2JzZXJ2ZXJ9IGZyb20gJy4vbGNwX2ltYWdlX29ic2VydmVyJztcbmltcG9ydCB7UHJlY29ubmVjdExpbmtDaGVja2VyfSBmcm9tICcuL3ByZWNvbm5lY3RfbGlua19jaGVja2VyJztcbmltcG9ydCB7UHJlbG9hZExpbmtDcmVhdG9yfSBmcm9tICcuL3ByZWxvYWQtbGluay1jcmVhdG9yJztcblxuLyoqXG4gKiBXaGVuIGEgQmFzZTY0LWVuY29kZWQgaW1hZ2UgaXMgcGFzc2VkIGFzIGFuIGlucHV0IHRvIHRoZSBgTmdPcHRpbWl6ZWRJbWFnZWAgZGlyZWN0aXZlLFxuICogYW4gZXJyb3IgaXMgdGhyb3duLiBUaGUgaW1hZ2UgY29udGVudCAoYXMgYSBzdHJpbmcpIG1pZ2h0IGJlIHZlcnkgbG9uZywgdGh1cyBtYWtpbmdcbiAqIGl0IGhhcmQgdG8gcmVhZCBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBlbnRpcmUgc3RyaW5nIGlzIGluY2x1ZGVkLiBUaGlzIGNvbnN0IGRlZmluZXNcbiAqIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbnRvIHRoZSBlcnJvciBtZXNzYWdlLiBUaGUgcmVzdFxuICogb2YgdGhlIGNvbnRlbnQgaXMgdHJ1bmNhdGVkLlxuICovXG5jb25zdCBCQVNFNjRfSU1HX01BWF9MRU5HVEhfSU5fRVJST1IgPSA1MDtcblxuLyoqXG4gKiBSZWdFeHByIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3JjIGluIGEgc3Jjc2V0IGlzIHVzaW5nIHdpZHRoIGRlc2NyaXB0b3JzLlxuICogU2hvdWxkIG1hdGNoIHNvbWV0aGluZyBsaWtlOiBcIjEwMHcsIDIwMHdcIi5cbiAqL1xuY29uc3QgVkFMSURfV0lEVEhfREVTQ1JJUFRPUl9TUkNTRVQgPSAvXigoXFxzKlxcZCt3XFxzKigsfCQpKXsxLH0pJC87XG5cbi8qKlxuICogUmVnRXhwciB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNyYyBpbiBhIHNyY3NldCBpcyB1c2luZyBkZW5zaXR5IGRlc2NyaXB0b3JzLlxuICogU2hvdWxkIG1hdGNoIHNvbWV0aGluZyBsaWtlOiBcIjF4LCAyeCwgNTB4XCIuIEFsc28gc3VwcG9ydHMgZGVjaW1hbHMgbGlrZSBcIjEuNXgsIDEuNTB4XCIuXG4gKi9cbmNvbnN0IFZBTElEX0RFTlNJVFlfREVTQ1JJUFRPUl9TUkNTRVQgPSAvXigoXFxzKlxcZCsoXFwuXFxkKyk/eFxccyooLHwkKSl7MSx9KSQvO1xuXG4vKipcbiAqIFNyY3NldCB2YWx1ZXMgd2l0aCBhIGRlbnNpdHkgZGVzY3JpcHRvciBoaWdoZXIgdGhhbiB0aGlzIHZhbHVlIHdpbGwgYWN0aXZlbHlcbiAqIHRocm93IGFuIGVycm9yLiBTdWNoIGRlbnNpdGllcyBhcmUgbm90IHBlcm1pdHRlZCBhcyB0aGV5IGNhdXNlIGltYWdlIHNpemVzXG4gKiB0byBiZSB1bnJlYXNvbmFibHkgbGFyZ2UgYW5kIHNsb3cgZG93biBMQ1AuXG4gKi9cbmV4cG9ydCBjb25zdCBBQlNPTFVURV9TUkNTRVRfREVOU0lUWV9DQVAgPSAzO1xuXG4vKipcbiAqIFVzZWQgb25seSBpbiBlcnJvciBtZXNzYWdlIHRleHQgdG8gY29tbXVuaWNhdGUgYmVzdCBwcmFjdGljZXMsIGFzIHdlIHdpbGxcbiAqIG9ubHkgdGhyb3cgYmFzZWQgb24gdGhlIHNsaWdodGx5IG1vcmUgY29uc2VydmF0aXZlIEFCU09MVVRFX1NSQ1NFVF9ERU5TSVRZX0NBUC5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFQ09NTUVOREVEX1NSQ1NFVF9ERU5TSVRZX0NBUCA9IDI7XG5cbi8qKlxuICogVXNlZCBpbiBnZW5lcmF0aW5nIGF1dG9tYXRpYyBkZW5zaXR5LWJhc2VkIHNyY3NldHNcbiAqL1xuY29uc3QgREVOU0lUWV9TUkNTRVRfTVVMVElQTElFUlMgPSBbMSwgMl07XG5cbi8qKlxuICogVXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJlYWtwb2ludHMgdG8gdXNlIG9uIGZ1bGwtd2lkdGggaW1hZ2VzXG4gKi9cbmNvbnN0IFZJRVdQT1JUX0JSRUFLUE9JTlRfQ1VUT0ZGID0gNjQwO1xuLyoqXG4gKiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHR3byBhc3BlY3QgcmF0aW9zIGFyZSBzaW1pbGFyIGluIHZhbHVlLlxuICovXG5jb25zdCBBU1BFQ1RfUkFUSU9fVE9MRVJBTkNFID0gMC4xO1xuXG4vKipcbiAqIFVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGltYWdlIGhhcyBiZWVuIHJlcXVlc3RlZCBhdCBhbiBvdmVybHlcbiAqIGxhcmdlIHNpemUgY29tcGFyZWQgdG8gdGhlIGFjdHVhbCByZW5kZXJlZCBpbWFnZSBzaXplIChhZnRlciB0YWtpbmdcbiAqIGludG8gYWNjb3VudCBhIHR5cGljYWwgZGV2aWNlIHBpeGVsIHJhdGlvKS4gSW4gcGl4ZWxzLlxuICovXG5jb25zdCBPVkVSU0laRURfSU1BR0VfVE9MRVJBTkNFID0gMTAwMDtcblxuLyoqXG4gKiBVc2VkIHRvIGxpbWl0IGF1dG9tYXRpYyBzcmNzZXQgZ2VuZXJhdGlvbiBvZiB2ZXJ5IGxhcmdlIHNvdXJjZXMgZm9yXG4gKiBmaXhlZC1zaXplIGltYWdlcy4gSW4gcGl4ZWxzLlxuICovXG5jb25zdCBGSVhFRF9TUkNTRVRfV0lEVEhfTElNSVQgPSAxOTIwO1xuY29uc3QgRklYRURfU1JDU0VUX0hFSUdIVF9MSU1JVCA9IDEwODA7XG5cbi8qKlxuICogRGVmYXVsdCBibHVyIHJhZGl1cyBvZiB0aGUgQ1NTIGZpbHRlciB1c2VkIG9uIHBsYWNlaG9sZGVyIGltYWdlcywgaW4gcGl4ZWxzXG4gKi9cbmV4cG9ydCBjb25zdCBQTEFDRUhPTERFUl9CTFVSX0FNT1VOVCA9IDE1O1xuXG4vKipcbiAqIFBsYWNlaG9sZGVyIGRpbWVuc2lvbiAoaGVpZ2h0IG9yIHdpZHRoKSBsaW1pdCBpbiBwaXhlbHMuIEFuZ3VsYXIgcHJvZHVjZXMgYSB3YXJuaW5nXG4gKiB3aGVuIHRoaXMgbGltaXQgaXMgY3Jvc3NlZC5cbiAqL1xuY29uc3QgUExBQ0VIT0xERVJfRElNRU5TSU9OX0xJTUlUID0gMTAwMDtcblxuLyoqXG4gKiBVc2VkIHRvIHdhcm4gb3IgZXJyb3Igd2hlbiB0aGUgdXNlciBwcm92aWRlcyBhbiBvdmVybHkgbGFyZ2UgZGF0YVVSTCBmb3IgdGhlIHBsYWNlaG9sZGVyXG4gKiBhdHRyaWJ1dGUuXG4gKiBDaGFyYWN0ZXIgY291bnQgb2YgQmFzZTY0IGltYWdlcyBpcyAxIGNoYXJhY3RlciBwZXIgYnl0ZSwgYW5kIGJhc2U2NCBlbmNvZGluZyBpcyBhcHByb3hpbWF0ZWx5XG4gKiAzMyUgbGFyZ2VyIHRoYW4gYmFzZSBpbWFnZXMsIHNvIDQwMDAgY2hhcmFjdGVycyBpcyBhcm91bmQgM0tCIG9uIGRpc2sgYW5kIDEwMDAwIGNoYXJhY3RlcnMgaXNcbiAqIGFyb3VuZCA3LjdLQi4gRXhwZXJpbWVudGFsbHksIDQwMDAgY2hhcmFjdGVycyBpcyBhYm91dCAyMHgyMHB4IGluIFBORyBvciBtZWRpdW0tcXVhbGl0eSBKUEVHXG4gKiBmb3JtYXQsIGFuZCAxMCwwMDAgaXMgYXJvdW5kIDUweDUwcHgsIGJ1dCB0aGVyZSdzIHF1aXRlIGEgYml0IG9mIHZhcmlhdGlvbiBkZXBlbmRpbmcgb24gaG93IHRoZVxuICogaW1hZ2UgaXMgc2F2ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBEQVRBX1VSTF9XQVJOX0xJTUlUID0gNDAwMDtcbmV4cG9ydCBjb25zdCBEQVRBX1VSTF9FUlJPUl9MSU1JVCA9IDEwMDAwO1xuXG4vKiogSW5mbyBhYm91dCBidWlsdC1pbiBsb2FkZXJzIHdlIGNhbiB0ZXN0IGZvci4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVF9JTl9MT0FERVJTID0gW1xuICBpbWdpeExvYWRlckluZm8sXG4gIGltYWdlS2l0TG9hZGVySW5mbyxcbiAgY2xvdWRpbmFyeUxvYWRlckluZm8sXG4gIG5ldGxpZnlMb2FkZXJJbmZvLFxuXTtcblxuLyoqXG4gKiBUaHJlc2hvbGQgZm9yIHRoZSBQUklPUklUWV9UUlVFX0NPVU5UXG4gKi9cbmNvbnN0IFBSSU9SSVRZX0NPVU5UX1RIUkVTSE9MRCA9IDEwO1xuXG4vKipcbiAqIFRoaXMgY291bnQgaXMgdXNlZCB0byBsb2cgYSBkZXZNb2RlIHdhcm5pbmdcbiAqIHdoZW4gdGhlIGNvdW50IG9mIGRpcmVjdGl2ZSBpbnN0YW5jZXMgd2l0aCBwcmlvcml0eT10cnVlXG4gKiBleGNlZWRzIHRoZSB0aHJlc2hvbGQgUFJJT1JJVFlfQ09VTlRfVEhSRVNIT0xEXG4gKi9cbmxldCBJTUdTX1dJVEhfUFJJT1JJVFlfQVRUUl9DT1VOVCA9IDA7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgdGVzdGluZyBwdXJwb3NlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRJbWFnZVByaW9yaXR5Q291bnQoKSB7XG4gIElNR1NfV0lUSF9QUklPUklUWV9BVFRSX0NPVU5UID0gMDtcbn1cblxuLyoqXG4gKiBDb25maWcgb3B0aW9ucyB1c2VkIGluIHJlbmRlcmluZyBwbGFjZWhvbGRlciBpbWFnZXMuXG4gKlxuICogQHNlZSB7QGxpbmsgTmdPcHRpbWl6ZWRJbWFnZX1cbiAqIEBwdWJsaWNBcGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbWFnZVBsYWNlaG9sZGVyQ29uZmlnIHtcbiAgYmx1cj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGlyZWN0aXZlIHRoYXQgaW1wcm92ZXMgaW1hZ2UgbG9hZGluZyBwZXJmb3JtYW5jZSBieSBlbmZvcmNpbmcgYmVzdCBwcmFjdGljZXMuXG4gKlxuICogYE5nT3B0aW1pemVkSW1hZ2VgIGVuc3VyZXMgdGhhdCB0aGUgbG9hZGluZyBvZiB0aGUgTGFyZ2VzdCBDb250ZW50ZnVsIFBhaW50IChMQ1ApIGltYWdlIGlzXG4gKiBwcmlvcml0aXplZCBieTpcbiAqIC0gQXV0b21hdGljYWxseSBzZXR0aW5nIHRoZSBgZmV0Y2hwcmlvcml0eWAgYXR0cmlidXRlIG9uIHRoZSBgPGltZz5gIHRhZ1xuICogLSBMYXp5IGxvYWRpbmcgbm9uLXByaW9yaXR5IGltYWdlcyBieSBkZWZhdWx0XG4gKiAtIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGluZyBhIHByZWNvbm5lY3QgbGluayB0YWcgaW4gdGhlIGRvY3VtZW50IGhlYWRcbiAqXG4gKiBJbiBhZGRpdGlvbiwgdGhlIGRpcmVjdGl2ZTpcbiAqIC0gR2VuZXJhdGVzIGFwcHJvcHJpYXRlIGFzc2V0IFVSTHMgaWYgYSBjb3JyZXNwb25kaW5nIGBJbWFnZUxvYWRlcmAgZnVuY3Rpb24gaXMgcHJvdmlkZWRcbiAqIC0gQXV0b21hdGljYWxseSBnZW5lcmF0ZXMgYSBzcmNzZXRcbiAqIC0gUmVxdWlyZXMgdGhhdCBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBhcmUgc2V0XG4gKiAtIFdhcm5zIGlmIGB3aWR0aGAgb3IgYGhlaWdodGAgaGF2ZSBiZWVuIHNldCBpbmNvcnJlY3RseVxuICogLSBXYXJucyBpZiB0aGUgaW1hZ2Ugd2lsbCBiZSB2aXN1YWxseSBkaXN0b3J0ZWQgd2hlbiByZW5kZXJlZFxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBUaGUgYE5nT3B0aW1pemVkSW1hZ2VgIGRpcmVjdGl2ZSBpcyBtYXJrZWQgYXMgW3N0YW5kYWxvbmVdKGd1aWRlL2NvbXBvbmVudHMvaW1wb3J0aW5nKSBhbmQgY2FuXG4gKiBiZSBpbXBvcnRlZCBkaXJlY3RseS5cbiAqXG4gKiBGb2xsb3cgdGhlIHN0ZXBzIGJlbG93IHRvIGVuYWJsZSBhbmQgdXNlIHRoZSBkaXJlY3RpdmU6XG4gKiAxLiBJbXBvcnQgaXQgaW50byB0aGUgbmVjZXNzYXJ5IE5nTW9kdWxlIG9yIGEgc3RhbmRhbG9uZSBDb21wb25lbnQuXG4gKiAyLiBPcHRpb25hbGx5IHByb3ZpZGUgYW4gYEltYWdlTG9hZGVyYCBpZiB5b3UgdXNlIGFuIGltYWdlIGhvc3Rpbmcgc2VydmljZS5cbiAqIDMuIFVwZGF0ZSB0aGUgbmVjZXNzYXJ5IGA8aW1nPmAgdGFncyBpbiB0ZW1wbGF0ZXMgYW5kIHJlcGxhY2UgYHNyY2AgYXR0cmlidXRlcyB3aXRoIGBuZ1NyY2AuXG4gKiBVc2luZyBhIGBuZ1NyY2AgYWxsb3dzIHRoZSBkaXJlY3RpdmUgdG8gY29udHJvbCB3aGVuIHRoZSBgc3JjYCBnZXRzIHNldCwgd2hpY2ggdHJpZ2dlcnMgYW4gaW1hZ2VcbiAqIGRvd25sb2FkLlxuICpcbiAqIFN0ZXAgMTogaW1wb3J0IHRoZSBgTmdPcHRpbWl6ZWRJbWFnZWAgZGlyZWN0aXZlLlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IE5nT3B0aW1pemVkSW1hZ2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuICpcbiAqIC8vIEluY2x1ZGUgaXQgaW50byB0aGUgbmVjZXNzYXJ5IE5nTW9kdWxlXG4gKiBATmdNb2R1bGUoe1xuICogICBpbXBvcnRzOiBbTmdPcHRpbWl6ZWRJbWFnZV0sXG4gKiB9KVxuICogY2xhc3MgQXBwTW9kdWxlIHt9XG4gKlxuICogLy8gLi4uIG9yIGEgc3RhbmRhbG9uZSBDb21wb25lbnRcbiAqIEBDb21wb25lbnQoe1xuICogICBzdGFuZGFsb25lOiB0cnVlXG4gKiAgIGltcG9ydHM6IFtOZ09wdGltaXplZEltYWdlXSxcbiAqIH0pXG4gKiBjbGFzcyBNeVN0YW5kYWxvbmVDb21wb25lbnQge31cbiAqIGBgYFxuICpcbiAqIFN0ZXAgMjogY29uZmlndXJlIGEgbG9hZGVyLlxuICpcbiAqIFRvIHVzZSB0aGUgKipkZWZhdWx0IGxvYWRlcioqOiBubyBhZGRpdGlvbmFsIGNvZGUgY2hhbmdlcyBhcmUgbmVjZXNzYXJ5LiBUaGUgVVJMIHJldHVybmVkIGJ5IHRoZVxuICogZ2VuZXJpYyBsb2FkZXIgd2lsbCBhbHdheXMgbWF0Y2ggdGhlIHZhbHVlIG9mIFwic3JjXCIuIEluIG90aGVyIHdvcmRzLCB0aGlzIGxvYWRlciBhcHBsaWVzIG5vXG4gKiB0cmFuc2Zvcm1hdGlvbnMgdG8gdGhlIHJlc291cmNlIFVSTCBhbmQgdGhlIHZhbHVlIG9mIHRoZSBgbmdTcmNgIGF0dHJpYnV0ZSB3aWxsIGJlIHVzZWQgYXMgaXMuXG4gKlxuICogVG8gdXNlIGFuIGV4aXN0aW5nIGxvYWRlciBmb3IgYSAqKnRoaXJkLXBhcnR5IGltYWdlIHNlcnZpY2UqKjogYWRkIHRoZSBwcm92aWRlciBmYWN0b3J5IGZvciB5b3VyXG4gKiBjaG9zZW4gc2VydmljZSB0byB0aGUgYHByb3ZpZGVyc2AgYXJyYXkuIEluIHRoZSBleGFtcGxlIGJlbG93LCB0aGUgSW1naXggbG9hZGVyIGlzIHVzZWQ6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHtwcm92aWRlSW1naXhMb2FkZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG4gKlxuICogLy8gQ2FsbCB0aGUgZnVuY3Rpb24gYW5kIGFkZCB0aGUgcmVzdWx0IHRvIHRoZSBgcHJvdmlkZXJzYCBhcnJheTpcbiAqIHByb3ZpZGVyczogW1xuICogICBwcm92aWRlSW1naXhMb2FkZXIoXCJodHRwczovL215LmJhc2UudXJsL1wiKSxcbiAqIF0sXG4gKiBgYGBcbiAqXG4gKiBUaGUgYE5nT3B0aW1pemVkSW1hZ2VgIGRpcmVjdGl2ZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczpcbiAqIC0gYHByb3ZpZGVDbG91ZGZsYXJlTG9hZGVyYFxuICogLSBgcHJvdmlkZUNsb3VkaW5hcnlMb2FkZXJgXG4gKiAtIGBwcm92aWRlSW1hZ2VLaXRMb2FkZXJgXG4gKiAtIGBwcm92aWRlSW1naXhMb2FkZXJgXG4gKlxuICogSWYgeW91IHVzZSBhIGRpZmZlcmVudCBpbWFnZSBwcm92aWRlciwgeW91IGNhbiBjcmVhdGUgYSBjdXN0b20gbG9hZGVyIGZ1bmN0aW9uIGFzIGRlc2NyaWJlZFxuICogYmVsb3cuXG4gKlxuICogVG8gdXNlIGEgKipjdXN0b20gbG9hZGVyKio6IHByb3ZpZGUgeW91ciBsb2FkZXIgZnVuY3Rpb24gYXMgYSB2YWx1ZSBmb3IgdGhlIGBJTUFHRV9MT0FERVJgIERJXG4gKiB0b2tlbi5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQge0lNQUdFX0xPQURFUiwgSW1hZ2VMb2FkZXJDb25maWd9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG4gKlxuICogLy8gQ29uZmlndXJlIHRoZSBsb2FkZXIgdXNpbmcgdGhlIGBJTUFHRV9MT0FERVJgIHRva2VuLlxuICogcHJvdmlkZXJzOiBbXG4gKiAgIHtcbiAqICAgICAgcHJvdmlkZTogSU1BR0VfTE9BREVSLFxuICogICAgICB1c2VWYWx1ZTogKGNvbmZpZzogSW1hZ2VMb2FkZXJDb25maWcpID0+IHtcbiAqICAgICAgICByZXR1cm4gYGh0dHBzOi8vZXhhbXBsZS5jb20vJHtjb25maWcuc3JjfS0ke2NvbmZpZy53aWR0aH0uanBnfWA7XG4gKiAgICAgIH1cbiAqICAgfSxcbiAqIF0sXG4gKiBgYGBcbiAqXG4gKiBTdGVwIDM6IHVwZGF0ZSBgPGltZz5gIHRhZ3MgaW4gdGVtcGxhdGVzIHRvIHVzZSBgbmdTcmNgIGluc3RlYWQgb2YgYHNyY2AuXG4gKlxuICogYGBgXG4gKiA8aW1nIG5nU3JjPVwibG9nby5wbmdcIiB3aWR0aD1cIjIwMFwiIGhlaWdodD1cIjEwMFwiPlxuICogYGBgXG4gKlxuICogQHB1YmxpY0FwaVxuICovXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdpbWdbbmdTcmNdJyxcbiAgaG9zdDoge1xuICAgICdbc3R5bGUucG9zaXRpb25dJzogJ2ZpbGwgPyBcImFic29sdXRlXCIgOiBudWxsJyxcbiAgICAnW3N0eWxlLndpZHRoXSc6ICdmaWxsID8gXCIxMDAlXCIgOiBudWxsJyxcbiAgICAnW3N0eWxlLmhlaWdodF0nOiAnZmlsbCA/IFwiMTAwJVwiIDogbnVsbCcsXG4gICAgJ1tzdHlsZS5pbnNldF0nOiAnZmlsbCA/IFwiMFwiIDogbnVsbCcsXG4gICAgJ1tzdHlsZS5iYWNrZ3JvdW5kLXNpemVdJzogJ3BsYWNlaG9sZGVyID8gXCJjb3ZlclwiIDogbnVsbCcsXG4gICAgJ1tzdHlsZS5iYWNrZ3JvdW5kLXBvc2l0aW9uXSc6ICdwbGFjZWhvbGRlciA/IFwiNTAlIDUwJVwiIDogbnVsbCcsXG4gICAgJ1tzdHlsZS5iYWNrZ3JvdW5kLXJlcGVhdF0nOiAncGxhY2Vob2xkZXIgPyBcIm5vLXJlcGVhdFwiIDogbnVsbCcsXG4gICAgJ1tzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXSc6ICdwbGFjZWhvbGRlciA/IGdlbmVyYXRlUGxhY2Vob2xkZXIocGxhY2Vob2xkZXIpIDogbnVsbCcsXG4gICAgJ1tzdHlsZS5maWx0ZXJdJzogYHBsYWNlaG9sZGVyICYmIHNob3VsZEJsdXJQbGFjZWhvbGRlcihwbGFjZWhvbGRlckNvbmZpZykgPyBcImJsdXIoJHtQTEFDRUhPTERFUl9CTFVSX0FNT1VOVH1weClcIiA6IG51bGxgLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBOZ09wdGltaXplZEltYWdlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgaW1hZ2VMb2FkZXIgPSBpbmplY3QoSU1BR0VfTE9BREVSKTtcbiAgcHJpdmF0ZSBjb25maWc6IEltYWdlQ29uZmlnID0gcHJvY2Vzc0NvbmZpZyhpbmplY3QoSU1BR0VfQ09ORklHKSk7XG4gIHByaXZhdGUgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgcHJpdmF0ZSBpbWdFbGVtZW50OiBIVE1MSW1hZ2VFbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnQ7XG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzU2VydmVyID0gaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVsb2FkTGlua0NyZWF0b3IgPSBpbmplY3QoUHJlbG9hZExpbmtDcmVhdG9yKTtcblxuICAvLyBhIExDUCBpbWFnZSBvYnNlcnZlciAtIHNob3VsZCBiZSBpbmplY3RlZCBvbmx5IGluIHRoZSBkZXYgbW9kZVxuICBwcml2YXRlIGxjcE9ic2VydmVyID0gbmdEZXZNb2RlID8gdGhpcy5pbmplY3Rvci5nZXQoTENQSW1hZ2VPYnNlcnZlcikgOiBudWxsO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHJld3JpdHRlbiBgc3JjYCBvbmNlIGFuZCBzdG9yZSBpdC5cbiAgICogVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgcmVwZXRpdGl2ZSBjYWxjdWxhdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGUgZGlyZWN0aXZlIGNsZWFudXAgaW4gdGhlXG4gICAqIGBuZ09uRGVzdHJveWAgZG9lcyBub3QgcmVseSBvbiB0aGUgYElNQUdFX0xPQURFUmAgbG9naWMgKHdoaWNoIGluIHR1cm4gY2FuIHJlbHkgb24gc29tZSBvdGhlclxuICAgKiBpbnN0YW5jZSB0aGF0IG1pZ2h0IGJlIGFscmVhZHkgZGVzdHJveWVkKS5cbiAgICovXG4gIHByaXZhdGUgX3JlbmRlcmVkU3JjOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgc291cmNlIGltYWdlLlxuICAgKiBJbWFnZSBuYW1lIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoZSBpbWFnZSBsb2FkZXIgYW5kIHRoZSBmaW5hbCBVUkwgd2lsbCBiZSBhcHBsaWVkIGFzIHRoZSBgc3JjYFxuICAgKiBwcm9wZXJ0eSBvZiB0aGUgaW1hZ2UuXG4gICAqL1xuICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlLCB0cmFuc2Zvcm06IHVud3JhcFNhZmVVcmx9KSBuZ1NyYyE6IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB3aWR0aCBvciBkZW5zaXR5IGRlc2NyaXB0b3JzLlxuICAgKiBUaGUgaW1hZ2UgbmFtZSB3aWxsIGJlIHRha2VuIGZyb20gYG5nU3JjYCBhbmQgY29tYmluZWQgd2l0aCB0aGUgbGlzdCBvZiB3aWR0aCBvciBkZW5zaXR5XG4gICAqIGRlc2NyaXB0b3JzIHRvIGdlbmVyYXRlIHRoZSBmaW5hbCBgc3Jjc2V0YCBwcm9wZXJ0eSBvZiB0aGUgaW1hZ2UuXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYFxuICAgKiA8aW1nIG5nU3JjPVwiaGVsbG8uanBnXCIgbmdTcmNzZXQ9XCIxMDB3LCAyMDB3XCIgLz4gID0+XG4gICAqIDxpbWcgc3JjPVwicGF0aC9oZWxsby5qcGdcIiBzcmNzZXQ9XCJwYXRoL2hlbGxvLmpwZz93PTEwMCAxMDB3LCBwYXRoL2hlbGxvLmpwZz93PTIwMCAyMDB3XCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoKSBuZ1NyY3NldCE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJhc2UgYHNpemVzYCBhdHRyaWJ1dGUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIGA8aW1nPmAgZWxlbWVudC5cbiAgICogUHJvdmlkaW5nIHNpemVzIGNhdXNlcyB0aGUgaW1hZ2UgdG8gY3JlYXRlIGFuIGF1dG9tYXRpYyByZXNwb25zaXZlIHNyY3NldC5cbiAgICovXG4gIEBJbnB1dCgpIHNpemVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb3IgcmVzcG9uc2l2ZSBpbWFnZXM6IHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGltYWdlIGluIHBpeGVscy5cbiAgICogRm9yIGZpeGVkIHNpemUgaW1hZ2VzOiB0aGUgZGVzaXJlZCByZW5kZXJlZCB3aWR0aCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzLlxuICAgKi9cbiAgQElucHV0KHt0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZX0pIHdpZHRoOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEZvciByZXNwb25zaXZlIGltYWdlczogdGhlIGludHJpbnNpYyBoZWlnaHQgb2YgdGhlIGltYWdlIGluIHBpeGVscy5cbiAgICogRm9yIGZpeGVkIHNpemUgaW1hZ2VzOiB0aGUgZGVzaXJlZCByZW5kZXJlZCBoZWlnaHQgb2YgdGhlIGltYWdlIGluIHBpeGVscy5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGV9KSBoZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGRlc2lyZWQgbG9hZGluZyBiZWhhdmlvciAobGF6eSwgZWFnZXIsIG9yIGF1dG8pLiBEZWZhdWx0cyB0byBgbGF6eWAsXG4gICAqIHdoaWNoIGlzIHJlY29tbWVuZGVkIGZvciBtb3N0IGltYWdlcy5cbiAgICpcbiAgICogV2FybmluZzogU2V0dGluZyBpbWFnZXMgYXMgbG9hZGluZz1cImVhZ2VyXCIgb3IgbG9hZGluZz1cImF1dG9cIiBtYXJrcyB0aGVtXG4gICAqIGFzIG5vbi1wcmlvcml0eSBpbWFnZXMgYW5kIGNhbiBodXJ0IGxvYWRpbmcgcGVyZm9ybWFuY2UuIEZvciBpbWFnZXMgd2hpY2hcbiAgICogbWF5IGJlIHRoZSBMQ1AgZWxlbWVudCwgdXNlIHRoZSBgcHJpb3JpdHlgIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIGBsb2FkaW5nYC5cbiAgICovXG4gIEBJbnB1dCgpIGxvYWRpbmc/OiAnbGF6eScgfCAnZWFnZXInIHwgJ2F1dG8nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGltYWdlIHNob3VsZCBoYXZlIGEgaGlnaCBwcmlvcml0eS5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSkgcHJpb3JpdHkgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGF0YSB0byBwYXNzIHRocm91Z2ggdG8gY3VzdG9tIGxvYWRlcnMuXG4gICAqL1xuICBASW5wdXQoKSBsb2FkZXJQYXJhbXM/OiB7W2tleTogc3RyaW5nXTogYW55fTtcblxuICAvKipcbiAgICogRGlzYWJsZXMgYXV0b21hdGljIHNyY3NldCBnZW5lcmF0aW9uIGZvciB0aGlzIGltYWdlLlxuICAgKi9cbiAgQElucHV0KHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KSBkaXNhYmxlT3B0aW1pemVkU3Jjc2V0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGltYWdlIHRvIFwiZmlsbCBtb2RlXCIsIHdoaWNoIGVsaW1pbmF0ZXMgdGhlIGhlaWdodC93aWR0aCByZXF1aXJlbWVudCBhbmQgYWRkc1xuICAgKiBzdHlsZXMgc3VjaCB0aGF0IHRoZSBpbWFnZSBmaWxscyBpdHMgY29udGFpbmluZyBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KSBmaWxsID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgVVJMIG9yIGRhdGEgVVJMIGZvciBhbiBpbWFnZSB0byBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgd2hpbGUgdGhpcyBpbWFnZSBsb2Fkcy5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBib29sZWFuT3JVcmxBdHRyaWJ1dGV9KSBwbGFjZWhvbGRlcj86IHN0cmluZyB8IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBwbGFjZWhvbGRlciBzZXR0aW5ncy4gT3B0aW9uczpcbiAgICogICAqIGJsdXI6IFNldHRpbmcgdGhpcyB0byBmYWxzZSBkaXNhYmxlcyB0aGUgYXV0b21hdGljIENTUyBibHVyLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXJDb25maWc/OiBJbWFnZVBsYWNlaG9sZGVyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgYHNyY2AgYXR0cmlidXRlIGlmIHNldCBvbiB0aGUgaG9zdCBgPGltZz5gIGVsZW1lbnQuXG4gICAqIFRoaXMgaW5wdXQgaXMgZXhjbHVzaXZlbHkgcmVhZCB0byBhc3NlcnQgdGhhdCBgc3JjYCBpcyBub3Qgc2V0IGluIGNvbmZsaWN0XG4gICAqIHdpdGggYG5nU3JjYCBhbmQgdGhhdCBpbWFnZXMgZG9uJ3Qgc3RhcnQgdG8gbG9hZCB1bnRpbCBhIGxhenkgbG9hZGluZyBzdHJhdGVneSBpcyBzZXQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQElucHV0KCkgc3JjPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgYHNyY3NldGAgYXR0cmlidXRlIGlmIHNldCBvbiB0aGUgaG9zdCBgPGltZz5gIGVsZW1lbnQuXG4gICAqIFRoaXMgaW5wdXQgaXMgZXhjbHVzaXZlbHkgcmVhZCB0byBhc3NlcnQgdGhhdCBgc3Jjc2V0YCBpcyBub3Qgc2V0IGluIGNvbmZsaWN0XG4gICAqIHdpdGggYG5nU3Jjc2V0YCBhbmQgdGhhdCBpbWFnZXMgZG9uJ3Qgc3RhcnQgdG8gbG9hZCB1bnRpbCBhIGxhenkgbG9hZGluZyBzdHJhdGVneSBpcyBzZXQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgQElucHV0KCkgc3Jjc2V0Pzogc3RyaW5nO1xuXG4gIC8qKiBAbm9kb2MgKi9cbiAgbmdPbkluaXQoKSB7XG4gICAgcGVyZm9ybWFuY2VNYXJrRmVhdHVyZSgnTmdPcHRpbWl6ZWRJbWFnZScpO1xuXG4gICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICAgIGFzc2VydE5vbkVtcHR5SW5wdXQodGhpcywgJ25nU3JjJywgdGhpcy5uZ1NyYyk7XG4gICAgICBhc3NlcnRWYWxpZE5nU3Jjc2V0KHRoaXMsIHRoaXMubmdTcmNzZXQpO1xuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ1NyYyh0aGlzKTtcbiAgICAgIGlmICh0aGlzLm5nU3Jjc2V0KSB7XG4gICAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdTcmNzZXQodGhpcyk7XG4gICAgICB9XG4gICAgICBhc3NlcnROb3RCYXNlNjRJbWFnZSh0aGlzKTtcbiAgICAgIGFzc2VydE5vdEJsb2JVcmwodGhpcyk7XG4gICAgICBpZiAodGhpcy5maWxsKSB7XG4gICAgICAgIGFzc2VydEVtcHR5V2lkdGhBbmRIZWlnaHQodGhpcyk7XG4gICAgICAgIC8vIFRoaXMgbGVhdmVzIHRoZSBBbmd1bGFyIHpvbmUgdG8gYXZvaWQgdHJpZ2dlcmluZyB1bm5lY2Vzc2FyeSBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlcyB3aGVuXG4gICAgICAgIC8vIGBsb2FkYCB0YXNrcyBhcmUgaW52b2tlZCBvbiBpbWFnZXMuXG4gICAgICAgIG5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgIGFzc2VydE5vblplcm9SZW5kZXJlZEhlaWdodCh0aGlzLCB0aGlzLmltZ0VsZW1lbnQsIHRoaXMucmVuZGVyZXIpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0Tm9uRW1wdHlXaWR0aEFuZEhlaWdodCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuaGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhc3NlcnRHcmVhdGVyVGhhblplcm8odGhpcywgdGhpcy5oZWlnaHQsICdoZWlnaHQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXNzZXJ0R3JlYXRlclRoYW5aZXJvKHRoaXMsIHRoaXMud2lkdGgsICd3aWR0aCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9ubHkgY2hlY2sgZm9yIGRpc3RvcnRlZCBpbWFnZXMgd2hlbiBub3QgaW4gZmlsbCBtb2RlLCB3aGVyZVxuICAgICAgICAvLyBpbWFnZXMgbWF5IGJlIGludGVudGlvbmFsbHkgc3RyZXRjaGVkLCBjcm9wcGVkIG9yIGxldHRlcmJveGVkLlxuICAgICAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICBhc3NlcnROb0ltYWdlRGlzdG9ydGlvbih0aGlzLCB0aGlzLmltZ0VsZW1lbnQsIHRoaXMucmVuZGVyZXIpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXNzZXJ0VmFsaWRMb2FkaW5nSW5wdXQodGhpcyk7XG4gICAgICBpZiAoIXRoaXMubmdTcmNzZXQpIHtcbiAgICAgICAgYXNzZXJ0Tm9Db21wbGV4U2l6ZXModGhpcyk7XG4gICAgICB9XG4gICAgICBhc3NlcnRWYWxpZFBsYWNlaG9sZGVyKHRoaXMsIHRoaXMuaW1hZ2VMb2FkZXIpO1xuICAgICAgYXNzZXJ0Tm90TWlzc2luZ0J1aWx0SW5Mb2FkZXIodGhpcy5uZ1NyYywgdGhpcy5pbWFnZUxvYWRlcik7XG4gICAgICBhc3NlcnROb05nU3Jjc2V0V2l0aG91dExvYWRlcih0aGlzLCB0aGlzLmltYWdlTG9hZGVyKTtcbiAgICAgIGFzc2VydE5vTG9hZGVyUGFyYW1zV2l0aG91dExvYWRlcih0aGlzLCB0aGlzLmltYWdlTG9hZGVyKTtcblxuICAgICAgaWYgKHRoaXMubGNwT2JzZXJ2ZXIgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxjcE9ic2VydmVyIS5yZWdpc3RlckltYWdlKHRoaXMuZ2V0UmV3cml0dGVuU3JjKCksIHRoaXMubmdTcmMsIHRoaXMucHJpb3JpdHkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJpb3JpdHkpIHtcbiAgICAgICAgY29uc3QgY2hlY2tlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFByZWNvbm5lY3RMaW5rQ2hlY2tlcik7XG4gICAgICAgIGNoZWNrZXIuYXNzZXJ0UHJlY29ubmVjdCh0aGlzLmdldFJld3JpdHRlblNyYygpLCB0aGlzLm5nU3JjKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICBjb25zdCBhcHBsaWNhdGlvblJlZiA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFwcGxpY2F0aW9uUmVmKTtcbiAgICAgICAgICBhc3NldFByaW9yaXR5Q291bnRCZWxvd1RocmVzaG9sZChhcHBsaWNhdGlvblJlZik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMucmVtb3ZlUGxhY2Vob2xkZXJPbkxvYWQodGhpcy5pbWdFbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIb3N0QXR0cmlidXRlcygpIHtcbiAgICAvLyBNdXN0IHNldCB3aWR0aC9oZWlnaHQgZXhwbGljaXRseSBpbiBjYXNlIHRoZXkgYXJlIGJvdW5kIChpbiB3aGljaCBjYXNlIHRoZXkgd2lsbFxuICAgIC8vIG9ubHkgYmUgcmVmbGVjdGVkIGFuZCBub3QgZm91bmQgYnkgdGhlIGJyb3dzZXIpXG4gICAgaWYgKHRoaXMuZmlsbCkge1xuICAgICAgdGhpcy5zaXplcyB8fD0gJzEwMHZ3JztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCd3aWR0aCcsIHRoaXMud2lkdGghLnRvU3RyaW5nKCkpO1xuICAgICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCdoZWlnaHQnLCB0aGlzLmhlaWdodCEudG9TdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCdsb2FkaW5nJywgdGhpcy5nZXRMb2FkaW5nQmVoYXZpb3IoKSk7XG4gICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCdmZXRjaHByaW9yaXR5JywgdGhpcy5nZXRGZXRjaFByaW9yaXR5KCkpO1xuXG4gICAgLy8gVGhlIGBkYXRhLW5nLWltZ2AgYXR0cmlidXRlIGZsYWdzIGFuIGltYWdlIGFzIHVzaW5nIHRoZSBkaXJlY3RpdmUsIHRvIGFsbG93XG4gICAgLy8gZm9yIGFuYWx5c2lzIG9mIHRoZSBkaXJlY3RpdmUncyBwZXJmb3JtYW5jZS5cbiAgICB0aGlzLnNldEhvc3RBdHRyaWJ1dGUoJ25nLWltZycsICd0cnVlJyk7XG5cbiAgICAvLyBUaGUgYHNyY2AgYW5kIGBzcmNzZXRgIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHNldCBsYXN0IHNpbmNlIG90aGVyIGF0dHJpYnV0ZXNcbiAgICAvLyBjb3VsZCBhZmZlY3QgdGhlIGltYWdlJ3MgbG9hZGluZyBiZWhhdmlvci5cbiAgICBjb25zdCByZXdyaXR0ZW5TcmNzZXQgPSB0aGlzLnVwZGF0ZVNyY0FuZFNyY3NldCgpO1xuXG4gICAgaWYgKHRoaXMuc2l6ZXMpIHtcbiAgICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnc2l6ZXMnLCB0aGlzLnNpemVzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTZXJ2ZXIgJiYgdGhpcy5wcmlvcml0eSkge1xuICAgICAgdGhpcy5wcmVsb2FkTGlua0NyZWF0b3IuY3JlYXRlUHJlbG9hZExpbmtUYWcoXG4gICAgICAgIHRoaXMucmVuZGVyZXIsXG4gICAgICAgIHRoaXMuZ2V0UmV3cml0dGVuU3JjKCksXG4gICAgICAgIHJld3JpdHRlblNyY3NldCxcbiAgICAgICAgdGhpcy5zaXplcyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBub2RvYyAqL1xuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgYXNzZXJ0Tm9Qb3N0SW5pdElucHV0Q2hhbmdlKHRoaXMsIGNoYW5nZXMsIFtcbiAgICAgICAgJ25nU3Jjc2V0JyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdwcmlvcml0eScsXG4gICAgICAgICdmaWxsJyxcbiAgICAgICAgJ2xvYWRpbmcnLFxuICAgICAgICAnc2l6ZXMnLFxuICAgICAgICAnbG9hZGVyUGFyYW1zJyxcbiAgICAgICAgJ2Rpc2FibGVPcHRpbWl6ZWRTcmNzZXQnLFxuICAgICAgXSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyduZ1NyYyddICYmICFjaGFuZ2VzWyduZ1NyYyddLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgY29uc3Qgb2xkU3JjID0gdGhpcy5fcmVuZGVyZWRTcmM7XG4gICAgICB0aGlzLnVwZGF0ZVNyY0FuZFNyY3NldCh0cnVlKTtcbiAgICAgIGNvbnN0IG5ld1NyYyA9IHRoaXMuX3JlbmRlcmVkU3JjO1xuICAgICAgaWYgKHRoaXMubGNwT2JzZXJ2ZXIgIT09IG51bGwgJiYgb2xkU3JjICYmIG5ld1NyYyAmJiBvbGRTcmMgIT09IG5ld1NyYykge1xuICAgICAgICBjb25zdCBuZ1pvbmUgPSB0aGlzLmluamVjdG9yLmdldChOZ1pvbmUpO1xuICAgICAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubGNwT2JzZXJ2ZXI/LnVwZGF0ZUltYWdlKG9sZFNyYywgbmV3U3JjKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5nRGV2TW9kZSAmJiBjaGFuZ2VzWydwbGFjZWhvbGRlciddPy5jdXJyZW50VmFsdWUgJiYgIXRoaXMuaXNTZXJ2ZXIpIHtcbiAgICAgIGFzc2VydFBsYWNlaG9sZGVyRGltZW5zaW9ucyh0aGlzLCB0aGlzLmltZ0VsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FsbEltYWdlTG9hZGVyKFxuICAgIGNvbmZpZ1dpdGhvdXRDdXN0b21QYXJhbXM6IE9taXQ8SW1hZ2VMb2FkZXJDb25maWcsICdsb2FkZXJQYXJhbXMnPixcbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgYXVnbWVudGVkQ29uZmlnOiBJbWFnZUxvYWRlckNvbmZpZyA9IGNvbmZpZ1dpdGhvdXRDdXN0b21QYXJhbXM7XG4gICAgaWYgKHRoaXMubG9hZGVyUGFyYW1zKSB7XG4gICAgICBhdWdtZW50ZWRDb25maWcubG9hZGVyUGFyYW1zID0gdGhpcy5sb2FkZXJQYXJhbXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmltYWdlTG9hZGVyKGF1Z21lbnRlZENvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGdldExvYWRpbmdCZWhhdmlvcigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5wcmlvcml0eSAmJiB0aGlzLmxvYWRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJpb3JpdHkgPyAnZWFnZXInIDogJ2xhenknO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGZXRjaFByaW9yaXR5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJpb3JpdHkgPyAnaGlnaCcgOiAnYXV0byc7XG4gIH1cblxuICBwcml2YXRlIGdldFJld3JpdHRlblNyYygpOiBzdHJpbmcge1xuICAgIC8vIEltYWdlTG9hZGVyQ29uZmlnIHN1cHBvcnRzIHNldHRpbmcgYSB3aWR0aCBwcm9wZXJ0eS4gSG93ZXZlciwgd2UncmUgbm90IHNldHRpbmcgd2lkdGggaGVyZVxuICAgIC8vIGJlY2F1c2UgaWYgdGhlIGRldmVsb3BlciB1c2VzIHJlbmRlcmVkIHdpZHRoIGluc3RlYWQgb2YgaW50cmluc2ljIHdpZHRoIGluIHRoZSBIVE1MIHdpZHRoXG4gICAgLy8gYXR0cmlidXRlLCB0aGUgaW1hZ2UgcmVxdWVzdGVkIG1heSBiZSB0b28gc21hbGwgZm9yIDJ4KyBzY3JlZW5zLlxuICAgIGlmICghdGhpcy5fcmVuZGVyZWRTcmMpIHtcbiAgICAgIGNvbnN0IGltZ0NvbmZpZyA9IHtzcmM6IHRoaXMubmdTcmN9O1xuICAgICAgLy8gQ2FjaGUgY2FsY3VsYXRlZCBpbWFnZSBzcmMgdG8gcmV1c2UgaXQgbGF0ZXIgaW4gdGhlIGNvZGUuXG4gICAgICB0aGlzLl9yZW5kZXJlZFNyYyA9IHRoaXMuY2FsbEltYWdlTG9hZGVyKGltZ0NvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yZW5kZXJlZFNyYztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV3cml0dGVuU3Jjc2V0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgd2lkdGhTcmNTZXQgPSBWQUxJRF9XSURUSF9ERVNDUklQVE9SX1NSQ1NFVC50ZXN0KHRoaXMubmdTcmNzZXQpO1xuICAgIGNvbnN0IGZpbmFsU3JjcyA9IHRoaXMubmdTcmNzZXRcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAuZmlsdGVyKChzcmMpID0+IHNyYyAhPT0gJycpXG4gICAgICAubWFwKChzcmNTdHIpID0+IHtcbiAgICAgICAgc3JjU3RyID0gc3JjU3RyLnRyaW0oKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB3aWR0aFNyY1NldCA/IHBhcnNlRmxvYXQoc3JjU3RyKSA6IHBhcnNlRmxvYXQoc3JjU3RyKSAqIHRoaXMud2lkdGghO1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5jYWxsSW1hZ2VMb2FkZXIoe3NyYzogdGhpcy5uZ1NyYywgd2lkdGh9KX0gJHtzcmNTdHJ9YDtcbiAgICAgIH0pO1xuICAgIHJldHVybiBmaW5hbFNyY3Muam9pbignLCAnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXV0b21hdGljU3Jjc2V0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc2l6ZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc3BvbnNpdmVTcmNzZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rml4ZWRTcmNzZXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFJlc3BvbnNpdmVTcmNzZXQoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7YnJlYWtwb2ludHN9ID0gdGhpcy5jb25maWc7XG5cbiAgICBsZXQgZmlsdGVyZWRCcmVha3BvaW50cyA9IGJyZWFrcG9pbnRzITtcbiAgICBpZiAodGhpcy5zaXplcz8udHJpbSgpID09PSAnMTAwdncnKSB7XG4gICAgICAvLyBTaW5jZSB0aGlzIGlzIGEgZnVsbC1zY3JlZW4td2lkdGggaW1hZ2UsIG91ciBzcmNzZXQgb25seSBuZWVkcyB0byBpbmNsdWRlXG4gICAgICAvLyBicmVha3BvaW50cyB3aXRoIGZ1bGwgdmlld3BvcnQgd2lkdGhzLlxuICAgICAgZmlsdGVyZWRCcmVha3BvaW50cyA9IGJyZWFrcG9pbnRzIS5maWx0ZXIoKGJwKSA9PiBicCA+PSBWSUVXUE9SVF9CUkVBS1BPSU5UX0NVVE9GRik7XG4gICAgfVxuXG4gICAgY29uc3QgZmluYWxTcmNzID0gZmlsdGVyZWRCcmVha3BvaW50cy5tYXAoXG4gICAgICAoYnApID0+IGAke3RoaXMuY2FsbEltYWdlTG9hZGVyKHtzcmM6IHRoaXMubmdTcmMsIHdpZHRoOiBicH0pfSAke2JwfXdgLFxuICAgICk7XG4gICAgcmV0dXJuIGZpbmFsU3Jjcy5qb2luKCcsICcpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTcmNBbmRTcmNzZXQoZm9yY2VTcmNSZWNhbGMgPSBmYWxzZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGZvcmNlU3JjUmVjYWxjKSB7XG4gICAgICAvLyBSZXNldCBjYWNoZWQgdmFsdWUsIHNvIHRoYXQgdGhlIGZvbGxvd3VwIGBnZXRSZXdyaXR0ZW5TcmMoKWAgY2FsbFxuICAgICAgLy8gd2lsbCByZWNhbGN1bGF0ZSBpdCBhbmQgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgIHRoaXMuX3JlbmRlcmVkU3JjID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXdyaXR0ZW5TcmMgPSB0aGlzLmdldFJld3JpdHRlblNyYygpO1xuICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnc3JjJywgcmV3cml0dGVuU3JjKTtcblxuICAgIGxldCByZXdyaXR0ZW5TcmNzZXQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5uZ1NyY3NldCkge1xuICAgICAgcmV3cml0dGVuU3Jjc2V0ID0gdGhpcy5nZXRSZXdyaXR0ZW5TcmNzZXQoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2hvdWxkR2VuZXJhdGVBdXRvbWF0aWNTcmNzZXQoKSkge1xuICAgICAgcmV3cml0dGVuU3Jjc2V0ID0gdGhpcy5nZXRBdXRvbWF0aWNTcmNzZXQoKTtcbiAgICB9XG5cbiAgICBpZiAocmV3cml0dGVuU3Jjc2V0KSB7XG4gICAgICB0aGlzLnNldEhvc3RBdHRyaWJ1dGUoJ3NyY3NldCcsIHJld3JpdHRlblNyY3NldCk7XG4gICAgfVxuICAgIHJldHVybiByZXdyaXR0ZW5TcmNzZXQ7XG4gIH1cblxuICBwcml2YXRlIGdldEZpeGVkU3Jjc2V0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgZmluYWxTcmNzID0gREVOU0lUWV9TUkNTRVRfTVVMVElQTElFUlMubWFwKFxuICAgICAgKG11bHRpcGxpZXIpID0+XG4gICAgICAgIGAke3RoaXMuY2FsbEltYWdlTG9hZGVyKHtcbiAgICAgICAgICBzcmM6IHRoaXMubmdTcmMsXG4gICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGghICogbXVsdGlwbGllcixcbiAgICAgICAgfSl9ICR7bXVsdGlwbGllcn14YCxcbiAgICApO1xuICAgIHJldHVybiBmaW5hbFNyY3Muam9pbignLCAnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkR2VuZXJhdGVBdXRvbWF0aWNTcmNzZXQoKTogYm9vbGVhbiB7XG4gICAgbGV0IG92ZXJzaXplZEltYWdlID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnNpemVzKSB7XG4gICAgICBvdmVyc2l6ZWRJbWFnZSA9XG4gICAgICAgIHRoaXMud2lkdGghID4gRklYRURfU1JDU0VUX1dJRFRIX0xJTUlUIHx8IHRoaXMuaGVpZ2h0ISA+IEZJWEVEX1NSQ1NFVF9IRUlHSFRfTElNSVQ7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5kaXNhYmxlT3B0aW1pemVkU3Jjc2V0ICYmXG4gICAgICAhdGhpcy5zcmNzZXQgJiZcbiAgICAgIHRoaXMuaW1hZ2VMb2FkZXIgIT09IG5vb3BJbWFnZUxvYWRlciAmJlxuICAgICAgIW92ZXJzaXplZEltYWdlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGltYWdlIHVybCBmb3JtYXR0ZWQgZm9yIHVzZSB3aXRoIHRoZSBDU1MgYmFja2dyb3VuZC1pbWFnZSBwcm9wZXJ0eS4gRXhwZWN0cyBvbmUgb2Y6XG4gICAqICogQSBiYXNlNjQgZW5jb2RlZCBpbWFnZSwgd2hpY2ggaXMgd3JhcHBlZCBhbmQgcGFzc2VkIHRocm91Z2guXG4gICAqICogQSBib29sZWFuLiBJZiB0cnVlLCBjYWxscyB0aGUgaW1hZ2UgbG9hZGVyIHRvIGdlbmVyYXRlIGEgc21hbGwgcGxhY2Vob2xkZXIgdXJsLlxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZVBsYWNlaG9sZGVyKHBsYWNlaG9sZGVySW5wdXQ6IHN0cmluZyB8IGJvb2xlYW4pOiBzdHJpbmcgfCBib29sZWFuIHwgbnVsbCB7XG4gICAgY29uc3Qge3BsYWNlaG9sZGVyUmVzb2x1dGlvbn0gPSB0aGlzLmNvbmZpZztcbiAgICBpZiAocGxhY2Vob2xkZXJJbnB1dCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGB1cmwoJHt0aGlzLmNhbGxJbWFnZUxvYWRlcih7XG4gICAgICAgIHNyYzogdGhpcy5uZ1NyYyxcbiAgICAgICAgd2lkdGg6IHBsYWNlaG9sZGVyUmVzb2x1dGlvbixcbiAgICAgICAgaXNQbGFjZWhvbGRlcjogdHJ1ZSxcbiAgICAgIH0pfSlgO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHBsYWNlaG9sZGVySW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYHVybCgke3BsYWNlaG9sZGVySW5wdXR9KWA7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYmx1ciBzaG91bGQgYmUgYXBwbGllZCwgYmFzZWQgb24gYW4gb3B0aW9uYWwgYm9vbGVhblxuICAgKiBwcm9wZXJ0eSBgYmx1cmAgd2l0aGluIHRoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdCBgcGxhY2Vob2xkZXJDb25maWdgLlxuICAgKi9cbiAgcHJpdmF0ZSBzaG91bGRCbHVyUGxhY2Vob2xkZXIocGxhY2Vob2xkZXJDb25maWc/OiBJbWFnZVBsYWNlaG9sZGVyQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKCFwbGFjZWhvbGRlckNvbmZpZyB8fCAhcGxhY2Vob2xkZXJDb25maWcuaGFzT3duUHJvcGVydHkoJ2JsdXInKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHBsYWNlaG9sZGVyQ29uZmlnLmJsdXIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQbGFjZWhvbGRlck9uTG9hZChpbWc6IEhUTUxJbWFnZUVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNoYW5nZURldGVjdG9yUmVmID0gdGhpcy5pbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgICAgcmVtb3ZlTG9hZExpc3RlbmVyRm4oKTtcbiAgICAgIHJlbW92ZUVycm9yTGlzdGVuZXJGbigpO1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbW92ZUxvYWRMaXN0ZW5lckZuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oaW1nLCAnbG9hZCcsIGNhbGxiYWNrKTtcbiAgICBjb25zdCByZW1vdmVFcnJvckxpc3RlbmVyRm4gPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihpbWcsICdlcnJvcicsIGNhbGxiYWNrKTtcblxuICAgIGNhbGxPbkxvYWRJZkltYWdlSXNMb2FkZWQoaW1nLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKiogQG5vZG9jICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGlmICghdGhpcy5wcmlvcml0eSAmJiB0aGlzLl9yZW5kZXJlZFNyYyAhPT0gbnVsbCAmJiB0aGlzLmxjcE9ic2VydmVyICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubGNwT2JzZXJ2ZXIudW5yZWdpc3RlckltYWdlKHRoaXMuX3JlbmRlcmVkU3JjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEhvc3RBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5pbWdFbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqKioqIEhlbHBlcnMgKioqKiovXG5cbi8qKlxuICogU29ydHMgcHJvdmlkZWQgY29uZmlnIGJyZWFrcG9pbnRzIGFuZCB1c2VzIGRlZmF1bHRzLlxuICovXG5mdW5jdGlvbiBwcm9jZXNzQ29uZmlnKGNvbmZpZzogSW1hZ2VDb25maWcpOiBJbWFnZUNvbmZpZyB7XG4gIGxldCBzb3J0ZWRCcmVha3BvaW50czoge2JyZWFrcG9pbnRzPzogbnVtYmVyW119ID0ge307XG4gIGlmIChjb25maWcuYnJlYWtwb2ludHMpIHtcbiAgICBzb3J0ZWRCcmVha3BvaW50cy5icmVha3BvaW50cyA9IGNvbmZpZy5icmVha3BvaW50cy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIElNQUdFX0NPTkZJR19ERUZBVUxUUywgY29uZmlnLCBzb3J0ZWRCcmVha3BvaW50cyk7XG59XG5cbi8qKioqKiBBc3NlcnQgZnVuY3Rpb25zICoqKioqL1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlcmUgaXMgbm8gYHNyY2Agc2V0IG9uIGEgaG9zdCBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBhc3NlcnROb0NvbmZsaWN0aW5nU3JjKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBpZiAoZGlyLnNyYykge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLlVORVhQRUNURURfU1JDX0FUVFIsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IGJvdGggXFxgc3JjXFxgIGFuZCBcXGBuZ1NyY1xcYCBoYXZlIGJlZW4gc2V0LiBgICtcbiAgICAgICAgYFN1cHBseWluZyBib3RoIG9mIHRoZXNlIGF0dHJpYnV0ZXMgYnJlYWtzIGxhenkgbG9hZGluZy4gYCArXG4gICAgICAgIGBUaGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgc2V0cyBcXGBzcmNcXGAgaXRzZWxmIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBcXGBuZ1NyY1xcYC4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgcGxlYXNlIHJlbW92ZSB0aGUgXFxgc3JjXFxgIGF0dHJpYnV0ZS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZXJlIGlzIG5vIGBzcmNzZXRgIHNldCBvbiBhIGhvc3QgZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9Db25mbGljdGluZ1NyY3NldChkaXI6IE5nT3B0aW1pemVkSW1hZ2UpIHtcbiAgaWYgKGRpci5zcmNzZXQpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5VTkVYUEVDVEVEX1NSQ1NFVF9BVFRSLFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBib3RoIFxcYHNyY3NldFxcYCBhbmQgXFxgbmdTcmNzZXRcXGAgaGF2ZSBiZWVuIHNldC4gYCArXG4gICAgICAgIGBTdXBwbHlpbmcgYm90aCBvZiB0aGVzZSBhdHRyaWJ1dGVzIGJyZWFrcyBsYXp5IGxvYWRpbmcuIGAgK1xuICAgICAgICBgVGhlIE5nT3B0aW1pemVkSW1hZ2UgZGlyZWN0aXZlIHNldHMgXFxgc3Jjc2V0XFxgIGl0c2VsZiBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYCArXG4gICAgICAgIGBcXGBuZ1NyY3NldFxcYC4gVG8gZml4IHRoaXMsIHBsZWFzZSByZW1vdmUgdGhlIFxcYHNyY3NldFxcYCBhdHRyaWJ1dGUuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgYG5nU3JjYCBpcyBub3QgYSBCYXNlNjQtZW5jb2RlZCBpbWFnZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm90QmFzZTY0SW1hZ2UoZGlyOiBOZ09wdGltaXplZEltYWdlKSB7XG4gIGxldCBuZ1NyYyA9IGRpci5uZ1NyYy50cmltKCk7XG4gIGlmIChuZ1NyYy5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgaWYgKG5nU3JjLmxlbmd0aCA+IEJBU0U2NF9JTUdfTUFYX0xFTkdUSF9JTl9FUlJPUikge1xuICAgICAgbmdTcmMgPSBuZ1NyYy5zdWJzdHJpbmcoMCwgQkFTRTY0X0lNR19NQVhfTEVOR1RIX0lOX0VSUk9SKSArICcuLi4nO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMsIGZhbHNlKX0gXFxgbmdTcmNcXGAgaXMgYSBCYXNlNjQtZW5jb2RlZCBzdHJpbmcgYCArXG4gICAgICAgIGAoJHtuZ1NyY30pLiBOZ09wdGltaXplZEltYWdlIGRvZXMgbm90IHN1cHBvcnQgQmFzZTY0LWVuY29kZWQgc3RyaW5ncy4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgZGlzYWJsZSB0aGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgZm9yIHRoaXMgZWxlbWVudCBgICtcbiAgICAgICAgYGJ5IHJlbW92aW5nIFxcYG5nU3JjXFxgIGFuZCB1c2luZyBhIHN0YW5kYXJkIFxcYHNyY1xcYCBhdHRyaWJ1dGUgaW5zdGVhZC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSAnc2l6ZXMnIG9ubHkgaW5jbHVkZXMgcmVzcG9uc2l2ZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29tcGxleFNpemVzKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBsZXQgc2l6ZXMgPSBkaXIuc2l6ZXM7XG4gIGlmIChzaXplcz8ubWF0Y2goLygoXFwpfCwpXFxzfF4pXFxkK3B4LykpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMsIGZhbHNlKX0gXFxgc2l6ZXNcXGAgd2FzIHNldCB0byBhIHN0cmluZyBpbmNsdWRpbmcgYCArXG4gICAgICAgIGBwaXhlbCB2YWx1ZXMuIEZvciBhdXRvbWF0aWMgXFxgc3Jjc2V0XFxgIGdlbmVyYXRpb24sIFxcYHNpemVzXFxgIG11c3Qgb25seSBpbmNsdWRlIHJlc3BvbnNpdmUgYCArXG4gICAgICAgIGB2YWx1ZXMsIHN1Y2ggYXMgXFxgc2l6ZXM9XCI1MHZ3XCJcXGAgb3IgXFxgc2l6ZXM9XCIobWluLXdpZHRoOiA3NjhweCkgNTB2dywgMTAwdndcIlxcYC4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgbW9kaWZ5IHRoZSBcXGBzaXplc1xcYCBhdHRyaWJ1dGUsIG9yIHByb3ZpZGUgeW91ciBvd24gXFxgbmdTcmNzZXRcXGAgdmFsdWUgZGlyZWN0bHkuYCxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGxhY2Vob2xkZXIoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgYXNzZXJ0Tm9QbGFjZWhvbGRlckNvbmZpZ1dpdGhvdXRQbGFjZWhvbGRlcihkaXIpO1xuICBhc3NlcnROb1JlbGF0aXZlUGxhY2Vob2xkZXJXaXRob3V0TG9hZGVyKGRpciwgaW1hZ2VMb2FkZXIpO1xuICBhc3NlcnROb092ZXJzaXplZERhdGFVcmwoZGlyKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHBsYWNlaG9sZGVyQ29uZmlnIGlzbid0IGJlaW5nIHVzZWQgd2l0aG91dCBwbGFjZWhvbGRlclxuICovXG5mdW5jdGlvbiBhc3NlcnROb1BsYWNlaG9sZGVyQ29uZmlnV2l0aG91dFBsYWNlaG9sZGVyKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBpZiAoZGlyLnBsYWNlaG9sZGVyQ29uZmlnICYmICFkaXIucGxhY2Vob2xkZXIpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhcbiAgICAgICAgZGlyLm5nU3JjLFxuICAgICAgICBmYWxzZSxcbiAgICAgICl9IFxcYHBsYWNlaG9sZGVyQ29uZmlnXFxgIG9wdGlvbnMgd2VyZSBwcm92aWRlZCBmb3IgYW4gYCArXG4gICAgICAgIGBpbWFnZSB0aGF0IGRvZXMgbm90IHVzZSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlLCBhbmQgd2lsbCBoYXZlIG5vIGVmZmVjdC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBpZiBhIHJlbGF0aXZlIFVSTCBwbGFjZWhvbGRlciBpcyBzcGVjaWZpZWQsIGJ1dCBubyBsb2FkZXIgaXMgcHJlc2VudCB0byBwcm92aWRlIHRoZSBzbWFsbFxuICogaW1hZ2UuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vUmVsYXRpdmVQbGFjZWhvbGRlcldpdGhvdXRMb2FkZXIoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgaWYgKGRpci5wbGFjZWhvbGRlciA9PT0gdHJ1ZSAmJiBpbWFnZUxvYWRlciA9PT0gbm9vcEltYWdlTG9hZGVyKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuTUlTU0lOR19ORUNFU1NBUllfTE9BREVSLFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlIGJ1dCBgICtcbiAgICAgICAgYG5vIGltYWdlIGxvYWRlciBpcyBjb25maWd1cmVkIChpLmUuIHRoZSBkZWZhdWx0IG9uZSBpcyBiZWluZyB1c2VkKSwgYCArXG4gICAgICAgIGB3aGljaCB3b3VsZCByZXN1bHQgaW4gdGhlIHNhbWUgaW1hZ2UgYmVpbmcgdXNlZCBmb3IgdGhlIHByaW1hcnkgaW1hZ2UgYW5kIGl0cyBwbGFjZWhvbGRlci4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgcHJvdmlkZSBhIGxvYWRlciBvciByZW1vdmUgdGhlIFxcYHBsYWNlaG9sZGVyXFxgIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbWFnZS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBvciB0aHJvd3MgYW4gZXJyb3IgaWYgYW4gb3ZlcnNpemVkIGRhdGFVUkwgcGxhY2Vob2xkZXIgaXMgcHJvdmlkZWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vT3ZlcnNpemVkRGF0YVVybChkaXI6IE5nT3B0aW1pemVkSW1hZ2UpIHtcbiAgaWYgKFxuICAgIGRpci5wbGFjZWhvbGRlciAmJlxuICAgIHR5cGVvZiBkaXIucGxhY2Vob2xkZXIgPT09ICdzdHJpbmcnICYmXG4gICAgZGlyLnBsYWNlaG9sZGVyLnN0YXJ0c1dpdGgoJ2RhdGE6JylcbiAgKSB7XG4gICAgaWYgKGRpci5wbGFjZWhvbGRlci5sZW5ndGggPiBEQVRBX1VSTF9FUlJPUl9MSU1JVCkge1xuICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgICAgUnVudGltZUVycm9yQ29kZS5PVkVSU0laRURfUExBQ0VIT0xERVIsXG4gICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoXG4gICAgICAgICAgZGlyLm5nU3JjLFxuICAgICAgICApfSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlIGlzIHNldCB0byBhIGRhdGEgVVJMIHdoaWNoIGlzIGxvbmdlciBgICtcbiAgICAgICAgICBgdGhhbiAke0RBVEFfVVJMX0VSUk9SX0xJTUlUfSBjaGFyYWN0ZXJzLiBUaGlzIGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLCBhcyBsYXJnZSBpbmxpbmUgcGxhY2Vob2xkZXJzIGAgK1xuICAgICAgICAgIGBkaXJlY3RseSBpbmNyZWFzZSB0aGUgYnVuZGxlIHNpemUgb2YgQW5ndWxhciBhbmQgaHVydCBwYWdlIGxvYWQgcGVyZm9ybWFuY2UuIFRvIGZpeCB0aGlzLCBnZW5lcmF0ZSBgICtcbiAgICAgICAgICBgYSBzbWFsbGVyIGRhdGEgVVJMIHBsYWNlaG9sZGVyLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGlyLnBsYWNlaG9sZGVyLmxlbmd0aCA+IERBVEFfVVJMX1dBUk5fTElNSVQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICAgIFJ1bnRpbWVFcnJvckNvZGUuT1ZFUlNJWkVEX1BMQUNFSE9MREVSLFxuICAgICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoXG4gICAgICAgICAgICBkaXIubmdTcmMsXG4gICAgICAgICAgKX0gdGhlIFxcYHBsYWNlaG9sZGVyXFxgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYSBkYXRhIFVSTCB3aGljaCBpcyBsb25nZXIgYCArXG4gICAgICAgICAgICBgdGhhbiAke0RBVEFfVVJMX1dBUk5fTElNSVR9IGNoYXJhY3RlcnMuIFRoaXMgaXMgZGlzY291cmFnZWQsIGFzIGxhcmdlIGlubGluZSBwbGFjZWhvbGRlcnMgYCArXG4gICAgICAgICAgICBgZGlyZWN0bHkgaW5jcmVhc2UgdGhlIGJ1bmRsZSBzaXplIG9mIEFuZ3VsYXIgYW5kIGh1cnQgcGFnZSBsb2FkIHBlcmZvcm1hbmNlLiBGb3IgYmV0dGVyIGxvYWRpbmcgcGVyZm9ybWFuY2UsIGAgK1xuICAgICAgICAgICAgYGdlbmVyYXRlIGEgc21hbGxlciBkYXRhIFVSTCBwbGFjZWhvbGRlci5gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSBgbmdTcmNgIGlzIG5vdCBhIEJsb2IgVVJMLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb3RCbG9iVXJsKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBjb25zdCBuZ1NyYyA9IGRpci5uZ1NyYy50cmltKCk7XG4gIGlmIChuZ1NyYy5zdGFydHNXaXRoKCdibG9iOicpKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gXFxgbmdTcmNcXGAgd2FzIHNldCB0byBhIGJsb2IgVVJMICgke25nU3JjfSkuIGAgK1xuICAgICAgICBgQmxvYiBVUkxzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBOZ09wdGltaXplZEltYWdlIGRpcmVjdGl2ZS4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgZGlzYWJsZSB0aGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgZm9yIHRoaXMgZWxlbWVudCBgICtcbiAgICAgICAgYGJ5IHJlbW92aW5nIFxcYG5nU3JjXFxgIGFuZCB1c2luZyBhIHJlZ3VsYXIgXFxgc3JjXFxgIGF0dHJpYnV0ZSBpbnN0ZWFkLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGlucHV0IGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5SW5wdXQoZGlyOiBOZ09wdGltaXplZEltYWdlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgY29uc3QgaXNFbXB0eVN0cmluZyA9IGlzU3RyaW5nICYmIHZhbHVlLnRyaW0oKSA9PT0gJyc7XG4gIGlmICghaXNTdHJpbmcgfHwgaXNFbXB0eVN0cmluZykge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IFxcYCR7bmFtZX1cXGAgaGFzIGFuIGludmFsaWQgdmFsdWUgYCArXG4gICAgICAgIGAoXFxgJHt2YWx1ZX1cXGApLiBUbyBmaXggdGhpcywgY2hhbmdlIHRoZSB2YWx1ZSB0byBhIG5vbi1lbXB0eSBzdHJpbmcuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgYG5nU3Jjc2V0YCBpcyBpbiBhIHZhbGlkIGZvcm1hdCwgZS5nLiBcIjEwMHcsIDIwMHdcIiBvciBcIjF4LCAyeFwiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWROZ1NyY3NldChkaXI6IE5nT3B0aW1pemVkSW1hZ2UsIHZhbHVlOiB1bmtub3duKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47XG4gIGFzc2VydE5vbkVtcHR5SW5wdXQoZGlyLCAnbmdTcmNzZXQnLCB2YWx1ZSk7XG4gIGNvbnN0IHN0cmluZ1ZhbCA9IHZhbHVlIGFzIHN0cmluZztcbiAgY29uc3QgaXNWYWxpZFdpZHRoRGVzY3JpcHRvciA9IFZBTElEX1dJRFRIX0RFU0NSSVBUT1JfU1JDU0VULnRlc3Qoc3RyaW5nVmFsKTtcbiAgY29uc3QgaXNWYWxpZERlbnNpdHlEZXNjcmlwdG9yID0gVkFMSURfREVOU0lUWV9ERVNDUklQVE9SX1NSQ1NFVC50ZXN0KHN0cmluZ1ZhbCk7XG5cbiAgaWYgKGlzVmFsaWREZW5zaXR5RGVzY3JpcHRvcikge1xuICAgIGFzc2VydFVuZGVyRGVuc2l0eUNhcChkaXIsIHN0cmluZ1ZhbCk7XG4gIH1cblxuICBjb25zdCBpc1ZhbGlkU3Jjc2V0ID0gaXNWYWxpZFdpZHRoRGVzY3JpcHRvciB8fCBpc1ZhbGlkRGVuc2l0eURlc2NyaXB0b3I7XG4gIGlmICghaXNWYWxpZFNyY3NldCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IFxcYG5nU3Jjc2V0XFxgIGhhcyBhbiBpbnZhbGlkIHZhbHVlIChcXGAke3ZhbHVlfVxcYCkuIGAgK1xuICAgICAgICBgVG8gZml4IHRoaXMsIHN1cHBseSBcXGBuZ1NyY3NldFxcYCB1c2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG9uZSBvciBtb3JlIHdpZHRoIGAgK1xuICAgICAgICBgZGVzY3JpcHRvcnMgKGUuZy4gXCIxMDB3LCAyMDB3XCIpIG9yIGRlbnNpdHkgZGVzY3JpcHRvcnMgKGUuZy4gXCIxeCwgMnhcIikuYCxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFVuZGVyRGVuc2l0eUNhcChkaXI6IE5nT3B0aW1pemVkSW1hZ2UsIHZhbHVlOiBzdHJpbmcpIHtcbiAgY29uc3QgdW5kZXJEZW5zaXR5Q2FwID0gdmFsdWVcbiAgICAuc3BsaXQoJywnKVxuICAgIC5ldmVyeSgobnVtKSA9PiBudW0gPT09ICcnIHx8IHBhcnNlRmxvYXQobnVtKSA8PSBBQlNPTFVURV9TUkNTRVRfREVOU0lUWV9DQVApO1xuICBpZiAoIXVuZGVyRGVuc2l0eUNhcCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBcXGBuZ1NyY3NldFxcYCBjb250YWlucyBhbiB1bnN1cHBvcnRlZCBpbWFnZSBkZW5zaXR5OmAgK1xuICAgICAgICBgXFxgJHt2YWx1ZX1cXGAuIE5nT3B0aW1pemVkSW1hZ2UgZ2VuZXJhbGx5IHJlY29tbWVuZHMgYSBtYXggaW1hZ2UgZGVuc2l0eSBvZiBgICtcbiAgICAgICAgYCR7UkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQfXggYnV0IHN1cHBvcnRzIGltYWdlIGRlbnNpdGllcyB1cCB0byBgICtcbiAgICAgICAgYCR7QUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQfXguIFRoZSBodW1hbiBleWUgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gaW1hZ2UgZGVuc2l0aWVzIGAgK1xuICAgICAgICBgZ3JlYXRlciB0aGFuICR7UkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQfXggLSB3aGljaCBtYWtlcyB0aGVtIHVubmVjZXNzYXJ5IGZvciBgICtcbiAgICAgICAgYG1vc3QgdXNlIGNhc2VzLiBJbWFnZXMgdGhhdCB3aWxsIGJlIHBpbmNoLXpvb21lZCBhcmUgdHlwaWNhbGx5IHRoZSBwcmltYXJ5IHVzZSBjYXNlIGZvciBgICtcbiAgICAgICAgYCR7QUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQfXggaW1hZ2VzLiBQbGVhc2UgcmVtb3ZlIHRoZSBoaWdoIGRlbnNpdHkgZGVzY3JpcHRvciBhbmQgdHJ5IGFnYWluLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBgUnVudGltZUVycm9yYCBpbnN0YW5jZSB0byByZXByZXNlbnQgYSBzaXR1YXRpb24gd2hlbiBhbiBpbnB1dCBpcyBzZXQgYWZ0ZXJcbiAqIHRoZSBkaXJlY3RpdmUgaGFzIGluaXRpYWxpemVkLlxuICovXG5mdW5jdGlvbiBwb3N0SW5pdElucHV0Q2hhbmdlRXJyb3IoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbnB1dE5hbWU6IHN0cmluZyk6IHt9IHtcbiAgbGV0IHJlYXNvbiE6IHN0cmluZztcbiAgaWYgKGlucHV0TmFtZSA9PT0gJ3dpZHRoJyB8fCBpbnB1dE5hbWUgPT09ICdoZWlnaHQnKSB7XG4gICAgcmVhc29uID1cbiAgICAgIGBDaGFuZ2luZyBcXGAke2lucHV0TmFtZX1cXGAgbWF5IHJlc3VsdCBpbiBkaWZmZXJlbnQgYXR0cmlidXRlIHZhbHVlIGAgK1xuICAgICAgYGFwcGxpZWQgdG8gdGhlIHVuZGVybHlpbmcgaW1hZ2UgZWxlbWVudCBhbmQgY2F1c2UgbGF5b3V0IHNoaWZ0cyBvbiBhIHBhZ2UuYDtcbiAgfSBlbHNlIHtcbiAgICByZWFzb24gPVxuICAgICAgYENoYW5naW5nIHRoZSBcXGAke2lucHV0TmFtZX1cXGAgd291bGQgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHVuZGVybHlpbmcgYCArXG4gICAgICBgaW1hZ2UgZWxlbWVudCwgYmVjYXVzZSB0aGUgcmVzb3VyY2UgbG9hZGluZyBoYXMgYWxyZWFkeSBvY2N1cnJlZC5gO1xuICB9XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFJ1bnRpbWVFcnJvckNvZGUuVU5FWFBFQ1RFRF9JTlBVVF9DSEFOR0UsXG4gICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBcXGAke2lucHV0TmFtZX1cXGAgd2FzIHVwZGF0ZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIGAgK1xuICAgICAgYFRoZSBOZ09wdGltaXplZEltYWdlIGRpcmVjdGl2ZSB3aWxsIG5vdCByZWFjdCB0byB0aGlzIGlucHV0IGNoYW5nZS4gJHtyZWFzb259IGAgK1xuICAgICAgYFRvIGZpeCB0aGlzLCBlaXRoZXIgc3dpdGNoIFxcYCR7aW5wdXROYW1lfVxcYCB0byBhIHN0YXRpYyB2YWx1ZSBgICtcbiAgICAgIGBvciB3cmFwIHRoZSBpbWFnZSBlbGVtZW50IGluIGFuICpuZ0lmIHRoYXQgaXMgZ2F0ZWQgb24gdGhlIG5lY2Vzc2FyeSB2YWx1ZS5gLFxuICApO1xufVxuXG4vKipcbiAqIFZlcmlmeSB0aGF0IG5vbmUgb2YgdGhlIGxpc3RlZCBpbnB1dHMgaGFzIGNoYW5nZWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vUG9zdEluaXRJbnB1dENoYW5nZShcbiAgZGlyOiBOZ09wdGltaXplZEltYWdlLFxuICBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzLFxuICBpbnB1dHM6IHN0cmluZ1tdLFxuKSB7XG4gIGlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGlzVXBkYXRlZCA9IGNoYW5nZXMuaGFzT3duUHJvcGVydHkoaW5wdXQpO1xuICAgIGlmIChpc1VwZGF0ZWQgJiYgIWNoYW5nZXNbaW5wdXRdLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgaWYgKGlucHV0ID09PSAnbmdTcmMnKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIGBuZ1NyY2AgaW5wdXQgY2hhbmdlcywgd2UgZGV0ZWN0IHRoYXQgb25seSBpbiB0aGVcbiAgICAgICAgLy8gYG5nT25DaGFuZ2VzYCBob29rLCB0aHVzIHRoZSBgbmdTcmNgIGlzIGFscmVhZHkgc2V0LiBXZSB1c2VcbiAgICAgICAgLy8gYG5nU3JjYCBpbiB0aGUgZXJyb3IgbWVzc2FnZSwgc28gd2UgdXNlIGEgcHJldmlvdXMgdmFsdWUsIGJ1dFxuICAgICAgICAvLyBub3QgdGhlIHVwZGF0ZWQgb25lIGluIGl0LlxuICAgICAgICBkaXIgPSB7bmdTcmM6IGNoYW5nZXNbaW5wdXRdLnByZXZpb3VzVmFsdWV9IGFzIE5nT3B0aW1pemVkSW1hZ2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBwb3N0SW5pdElucHV0Q2hhbmdlRXJyb3IoZGlyLCBpbnB1dCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IGEgc3BlY2lmaWVkIGlucHV0IGlzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwLlxuICovXG5mdW5jdGlvbiBhc3NlcnRHcmVhdGVyVGhhblplcm8oZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbnB1dFZhbHVlOiB1bmtub3duLCBpbnB1dE5hbWU6IHN0cmluZykge1xuICBjb25zdCB2YWxpZE51bWJlciA9IHR5cGVvZiBpbnB1dFZhbHVlID09PSAnbnVtYmVyJyAmJiBpbnB1dFZhbHVlID4gMDtcbiAgY29uc3QgdmFsaWRTdHJpbmcgPVxuICAgIHR5cGVvZiBpbnB1dFZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KGlucHV0VmFsdWUudHJpbSgpKSAmJiBwYXJzZUludChpbnB1dFZhbHVlKSA+IDA7XG4gIGlmICghdmFsaWROdW1iZXIgJiYgIXZhbGlkU3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gXFxgJHtpbnB1dE5hbWV9XFxgIGhhcyBhbiBpbnZhbGlkIHZhbHVlLiBgICtcbiAgICAgICAgYFRvIGZpeCB0aGlzLCBwcm92aWRlIFxcYCR7aW5wdXROYW1lfVxcYCBhcyBhIG51bWJlciBncmVhdGVyIHRoYW4gMC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSByZW5kZXJlZCBpbWFnZSBpcyBub3QgdmlzdWFsbHkgZGlzdG9ydGVkLiBFZmZlY3RpdmVseSB0aGlzIGlzIGNoZWNraW5nOlxuICogLSBXaGV0aGVyIHRoZSBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYXR0cmlidXRlcyByZWZsZWN0IHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgaW1hZ2UuXG4gKiAtIFdoZXRoZXIgaW1hZ2Ugc3R5bGluZyBpcyBcImNvcnJlY3RcIiAoc2VlIGJlbG93IGZvciBhIGxvbmdlciBleHBsYW5hdGlvbikuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vSW1hZ2VEaXN0b3J0aW9uKFxuICBkaXI6IE5nT3B0aW1pemVkSW1hZ2UsXG4gIGltZzogSFRNTEltYWdlRWxlbWVudCxcbiAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbikge1xuICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICByZW1vdmVMb2FkTGlzdGVuZXJGbigpO1xuICAgIHJlbW92ZUVycm9yTGlzdGVuZXJGbigpO1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbWcpO1xuICAgIGxldCByZW5kZXJlZFdpZHRoID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3dpZHRoJykpO1xuICAgIGxldCByZW5kZXJlZEhlaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKSk7XG4gICAgY29uc3QgYm94U2l6aW5nID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdib3gtc2l6aW5nJyk7XG5cbiAgICBpZiAoYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcbiAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctdG9wJyk7XG4gICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctcmlnaHQnKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctYm90dG9tJyk7XG4gICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1sZWZ0Jyk7XG4gICAgICByZW5kZXJlZFdpZHRoIC09IHBhcnNlRmxvYXQocGFkZGluZ1JpZ2h0KSArIHBhcnNlRmxvYXQocGFkZGluZ0xlZnQpO1xuICAgICAgcmVuZGVyZWRIZWlnaHQgLT0gcGFyc2VGbG9hdChwYWRkaW5nVG9wKSArIHBhcnNlRmxvYXQocGFkZGluZ0JvdHRvbSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyZWRBc3BlY3RSYXRpbyA9IHJlbmRlcmVkV2lkdGggLyByZW5kZXJlZEhlaWdodDtcbiAgICBjb25zdCBub25aZXJvUmVuZGVyZWREaW1lbnNpb25zID0gcmVuZGVyZWRXaWR0aCAhPT0gMCAmJiByZW5kZXJlZEhlaWdodCAhPT0gMDtcblxuICAgIGNvbnN0IGludHJpbnNpY1dpZHRoID0gaW1nLm5hdHVyYWxXaWR0aDtcbiAgICBjb25zdCBpbnRyaW5zaWNIZWlnaHQgPSBpbWcubmF0dXJhbEhlaWdodDtcbiAgICBjb25zdCBpbnRyaW5zaWNBc3BlY3RSYXRpbyA9IGludHJpbnNpY1dpZHRoIC8gaW50cmluc2ljSGVpZ2h0O1xuXG4gICAgY29uc3Qgc3VwcGxpZWRXaWR0aCA9IGRpci53aWR0aCE7XG4gICAgY29uc3Qgc3VwcGxpZWRIZWlnaHQgPSBkaXIuaGVpZ2h0ITtcbiAgICBjb25zdCBzdXBwbGllZEFzcGVjdFJhdGlvID0gc3VwcGxpZWRXaWR0aCAvIHN1cHBsaWVkSGVpZ2h0O1xuXG4gICAgLy8gVG9sZXJhbmNlIGlzIHVzZWQgdG8gYWNjb3VudCBmb3IgdGhlIGltcGFjdCBvZiBzdWJwaXhlbCByZW5kZXJpbmcuXG4gICAgLy8gRHVlIHRvIHN1YnBpeGVsIHJlbmRlcmluZywgdGhlIHJlbmRlcmVkLCBpbnRyaW5zaWMsIGFuZCBzdXBwbGllZFxuICAgIC8vIGFzcGVjdCByYXRpb3Mgb2YgYSBjb3JyZWN0bHkgY29uZmlndXJlZCBpbWFnZSBtYXkgbm90IGV4YWN0bHkgbWF0Y2guXG4gICAgLy8gRm9yIGV4YW1wbGUsIGEgYHdpZHRoPTQwMzAgaGVpZ2h0PTMwMjBgIGltYWdlIG1pZ2h0IGhhdmUgYSByZW5kZXJlZFxuICAgIC8vIHNpemUgb2YgXCIxMDYydywgNzk2LjQ4aFwiLiAoQW4gYXNwZWN0IHJhdGlvIG9mIDEuMzM0Li4uIHZzLiAxLjMzMy4uLilcbiAgICBjb25zdCBpbmFjY3VyYXRlRGltZW5zaW9ucyA9XG4gICAgICBNYXRoLmFicyhzdXBwbGllZEFzcGVjdFJhdGlvIC0gaW50cmluc2ljQXNwZWN0UmF0aW8pID4gQVNQRUNUX1JBVElPX1RPTEVSQU5DRTtcbiAgICBjb25zdCBzdHlsaW5nRGlzdG9ydGlvbiA9XG4gICAgICBub25aZXJvUmVuZGVyZWREaW1lbnNpb25zICYmXG4gICAgICBNYXRoLmFicyhpbnRyaW5zaWNBc3BlY3RSYXRpbyAtIHJlbmRlcmVkQXNwZWN0UmF0aW8pID4gQVNQRUNUX1JBVElPX1RPTEVSQU5DRTtcblxuICAgIGlmIChpbmFjY3VyYXRlRGltZW5zaW9ucykge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRSdW50aW1lRXJyb3IoXG4gICAgICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgaW1hZ2UgZG9lcyBub3QgbWF0Y2ggYCArXG4gICAgICAgICAgICBgdGhlIGFzcGVjdCByYXRpbyBpbmRpY2F0ZWQgYnkgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXR0cmlidXRlcy4gYCArXG4gICAgICAgICAgICBgXFxuSW50cmluc2ljIGltYWdlIHNpemU6ICR7aW50cmluc2ljV2lkdGh9dyB4ICR7aW50cmluc2ljSGVpZ2h0fWggYCArXG4gICAgICAgICAgICBgKGFzcGVjdC1yYXRpbzogJHtyb3VuZChcbiAgICAgICAgICAgICAgaW50cmluc2ljQXNwZWN0UmF0aW8sXG4gICAgICAgICAgICApfSkuIFxcblN1cHBsaWVkIHdpZHRoIGFuZCBoZWlnaHQgYXR0cmlidXRlczogYCArXG4gICAgICAgICAgICBgJHtzdXBwbGllZFdpZHRofXcgeCAke3N1cHBsaWVkSGVpZ2h0fWggKGFzcGVjdC1yYXRpbzogJHtyb3VuZChcbiAgICAgICAgICAgICAgc3VwcGxpZWRBc3BlY3RSYXRpbyxcbiAgICAgICAgICAgICl9KS4gYCArXG4gICAgICAgICAgICBgXFxuVG8gZml4IHRoaXMsIHVwZGF0ZSB0aGUgd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzLmAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoc3R5bGluZ0Rpc3RvcnRpb24pIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBhc3BlY3QgcmF0aW8gb2YgdGhlIHJlbmRlcmVkIGltYWdlIGAgK1xuICAgICAgICAgICAgYGRvZXMgbm90IG1hdGNoIHRoZSBpbWFnZSdzIGludHJpbnNpYyBhc3BlY3QgcmF0aW8uIGAgK1xuICAgICAgICAgICAgYFxcbkludHJpbnNpYyBpbWFnZSBzaXplOiAke2ludHJpbnNpY1dpZHRofXcgeCAke2ludHJpbnNpY0hlaWdodH1oIGAgK1xuICAgICAgICAgICAgYChhc3BlY3QtcmF0aW86ICR7cm91bmQoaW50cmluc2ljQXNwZWN0UmF0aW8pfSkuIFxcblJlbmRlcmVkIGltYWdlIHNpemU6IGAgK1xuICAgICAgICAgICAgYCR7cmVuZGVyZWRXaWR0aH13IHggJHtyZW5kZXJlZEhlaWdodH1oIChhc3BlY3QtcmF0aW86IGAgK1xuICAgICAgICAgICAgYCR7cm91bmQocmVuZGVyZWRBc3BlY3RSYXRpbyl9KS4gXFxuVGhpcyBpc3N1ZSBjYW4gb2NjdXIgaWYgXCJ3aWR0aFwiIGFuZCBcImhlaWdodFwiIGAgK1xuICAgICAgICAgICAgYGF0dHJpYnV0ZXMgYXJlIGFkZGVkIHRvIGFuIGltYWdlIHdpdGhvdXQgdXBkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYCArXG4gICAgICAgICAgICBgaW1hZ2Ugc3R5bGluZy4gVG8gZml4IHRoaXMsIGFkanVzdCBpbWFnZSBzdHlsaW5nLiBJbiBtb3N0IGNhc2VzLCBgICtcbiAgICAgICAgICAgIGBhZGRpbmcgXCJoZWlnaHQ6IGF1dG9cIiBvciBcIndpZHRoOiBhdXRvXCIgdG8gdGhlIGltYWdlIHN0eWxpbmcgd2lsbCBmaXggYCArXG4gICAgICAgICAgICBgdGhpcyBpc3N1ZS5gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCFkaXIubmdTcmNzZXQgJiYgbm9uWmVyb1JlbmRlcmVkRGltZW5zaW9ucykge1xuICAgICAgLy8gSWYgYG5nU3Jjc2V0YCBoYXNuJ3QgYmVlbiBzZXQsIHNhbml0eSBjaGVjayB0aGUgaW50cmluc2ljIHNpemUuXG4gICAgICBjb25zdCByZWNvbW1lbmRlZFdpZHRoID0gUkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQICogcmVuZGVyZWRXaWR0aDtcbiAgICAgIGNvbnN0IHJlY29tbWVuZGVkSGVpZ2h0ID0gUkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQICogcmVuZGVyZWRIZWlnaHQ7XG4gICAgICBjb25zdCBvdmVyc2l6ZWRXaWR0aCA9IGludHJpbnNpY1dpZHRoIC0gcmVjb21tZW5kZWRXaWR0aCA+PSBPVkVSU0laRURfSU1BR0VfVE9MRVJBTkNFO1xuICAgICAgY29uc3Qgb3ZlcnNpemVkSGVpZ2h0ID0gaW50cmluc2ljSGVpZ2h0IC0gcmVjb21tZW5kZWRIZWlnaHQgPj0gT1ZFUlNJWkVEX0lNQUdFX1RPTEVSQU5DRTtcbiAgICAgIGlmIChvdmVyc2l6ZWRXaWR0aCB8fCBvdmVyc2l6ZWRIZWlnaHQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICAgIFJ1bnRpbWVFcnJvckNvZGUuT1ZFUlNJWkVEX0lNQUdFLFxuICAgICAgICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgaW50cmluc2ljIGltYWdlIGlzIHNpZ25pZmljYW50bHkgYCArXG4gICAgICAgICAgICAgIGBsYXJnZXIgdGhhbiBuZWNlc3NhcnkuIGAgK1xuICAgICAgICAgICAgICBgXFxuUmVuZGVyZWQgaW1hZ2Ugc2l6ZTogJHtyZW5kZXJlZFdpZHRofXcgeCAke3JlbmRlcmVkSGVpZ2h0fWguIGAgK1xuICAgICAgICAgICAgICBgXFxuSW50cmluc2ljIGltYWdlIHNpemU6ICR7aW50cmluc2ljV2lkdGh9dyB4ICR7aW50cmluc2ljSGVpZ2h0fWguIGAgK1xuICAgICAgICAgICAgICBgXFxuUmVjb21tZW5kZWQgaW50cmluc2ljIGltYWdlIHNpemU6ICR7cmVjb21tZW5kZWRXaWR0aH13IHggJHtyZWNvbW1lbmRlZEhlaWdodH1oLiBgICtcbiAgICAgICAgICAgICAgYFxcbk5vdGU6IFJlY29tbWVuZGVkIGludHJpbnNpYyBpbWFnZSBzaXplIGlzIGNhbGN1bGF0ZWQgYXNzdW1pbmcgYSBtYXhpbXVtIERQUiBvZiBgICtcbiAgICAgICAgICAgICAgYCR7UkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQfS4gVG8gaW1wcm92ZSBsb2FkaW5nIHRpbWUsIHJlc2l6ZSB0aGUgaW1hZ2UgYCArXG4gICAgICAgICAgICAgIGBvciBjb25zaWRlciB1c2luZyB0aGUgXCJuZ1NyY3NldFwiIGFuZCBcInNpemVzXCIgYXR0cmlidXRlcy5gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlbW92ZUxvYWRMaXN0ZW5lckZuID0gcmVuZGVyZXIubGlzdGVuKGltZywgJ2xvYWQnLCBjYWxsYmFjayk7XG5cbiAgLy8gV2Ugb25seSBsaXN0ZW4gdG8gdGhlIGBlcnJvcmAgZXZlbnQgdG8gcmVtb3ZlIHRoZSBgbG9hZGAgZXZlbnQgbGlzdGVuZXIgYmVjYXVzZSBpdCB3aWxsIG5vdCBiZVxuICAvLyBmaXJlZCBpZiB0aGUgaW1hZ2UgZmFpbHMgdG8gbG9hZC4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIGluIGRldmVsb3BtZW50IG1vZGVcbiAgLy8gYmVjYXVzZSBpbWFnZSBlbGVtZW50cyBhcmVuJ3QgZ2FyYmFnZS1jb2xsZWN0ZWQgcHJvcGVybHkuIEl0IGhhcHBlbnMgYmVjYXVzZSB6b25lLmpzIHN0b3JlcyB0aGVcbiAgLy8gZXZlbnQgbGlzdGVuZXIgZGlyZWN0bHkgb24gdGhlIGVsZW1lbnQgYW5kIGNsb3N1cmVzIGNhcHR1cmUgYGRpcmAuXG4gIGNvbnN0IHJlbW92ZUVycm9yTGlzdGVuZXJGbiA9IHJlbmRlcmVyLmxpc3RlbihpbWcsICdlcnJvcicsICgpID0+IHtcbiAgICByZW1vdmVMb2FkTGlzdGVuZXJGbigpO1xuICAgIHJlbW92ZUVycm9yTGlzdGVuZXJGbigpO1xuICB9KTtcblxuICBjYWxsT25Mb2FkSWZJbWFnZUlzTG9hZGVkKGltZywgY2FsbGJhY2spO1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgYSBzcGVjaWZpZWQgaW5wdXQgaXMgc2V0LlxuICovXG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eVdpZHRoQW5kSGVpZ2h0KGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBsZXQgbWlzc2luZ0F0dHJpYnV0ZXMgPSBbXTtcbiAgaWYgKGRpci53aWR0aCA9PT0gdW5kZWZpbmVkKSBtaXNzaW5nQXR0cmlidXRlcy5wdXNoKCd3aWR0aCcpO1xuICBpZiAoZGlyLmhlaWdodCA9PT0gdW5kZWZpbmVkKSBtaXNzaW5nQXR0cmlidXRlcy5wdXNoKCdoZWlnaHQnKTtcbiAgaWYgKG1pc3NpbmdBdHRyaWJ1dGVzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5SRVFVSVJFRF9JTlBVVF9NSVNTSU5HLFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGVzZSByZXF1aXJlZCBhdHRyaWJ1dGVzIGAgK1xuICAgICAgICBgYXJlIG1pc3Npbmc6ICR7bWlzc2luZ0F0dHJpYnV0ZXMubWFwKChhdHRyKSA9PiBgXCIke2F0dHJ9XCJgKS5qb2luKCcsICcpfS4gYCArXG4gICAgICAgIGBJbmNsdWRpbmcgXCJ3aWR0aFwiIGFuZCBcImhlaWdodFwiIGF0dHJpYnV0ZXMgd2lsbCBwcmV2ZW50IGltYWdlLXJlbGF0ZWQgbGF5b3V0IHNoaWZ0cy4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgaW5jbHVkZSBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYXR0cmlidXRlcyBvbiB0aGUgaW1hZ2UgdGFnIG9yIHR1cm4gb24gYCArXG4gICAgICAgIGBcImZpbGxcIiBtb2RlIHdpdGggdGhlIFxcYGZpbGxcXGAgYXR0cmlidXRlLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgd2lkdGggYW5kIGhlaWdodCBhcmUgbm90IHNldC4gVXNlZCBpbiBmaWxsIG1vZGUsIHdoZXJlIHRob3NlIGF0dHJpYnV0ZXMgZG9uJ3QgbWFrZVxuICogc2Vuc2UuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydEVtcHR5V2lkdGhBbmRIZWlnaHQoZGlyOiBOZ09wdGltaXplZEltYWdlKSB7XG4gIGlmIChkaXIud2lkdGggfHwgZGlyLmhlaWdodCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBhdHRyaWJ1dGVzIFxcYGhlaWdodFxcYCBhbmQvb3IgXFxgd2lkdGhcXGAgYXJlIHByZXNlbnQgYCArXG4gICAgICAgIGBhbG9uZyB3aXRoIHRoZSBcXGBmaWxsXFxgIGF0dHJpYnV0ZS4gQmVjYXVzZSBcXGBmaWxsXFxgIG1vZGUgY2F1c2VzIGFuIGltYWdlIHRvIGZpbGwgaXRzIGNvbnRhaW5pbmcgYCArXG4gICAgICAgIGBlbGVtZW50LCB0aGUgc2l6ZSBhdHRyaWJ1dGVzIGhhdmUgbm8gZWZmZWN0IGFuZCBzaG91bGQgYmUgcmVtb3ZlZC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSByZW5kZXJlZCBpbWFnZSBoYXMgYSBub256ZXJvIGhlaWdodC4gSWYgdGhlIGltYWdlIGlzIGluIGZpbGwgbW9kZSwgcHJvdmlkZXNcbiAqIGd1aWRhbmNlIHRoYXQgdGhpcyBjYW4gYmUgY2F1c2VkIGJ5IHRoZSBjb250YWluaW5nIGVsZW1lbnQncyBDU1MgcG9zaXRpb24gcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vblplcm9SZW5kZXJlZEhlaWdodChcbiAgZGlyOiBOZ09wdGltaXplZEltYWdlLFxuICBpbWc6IEhUTUxJbWFnZUVsZW1lbnQsXG4gIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4pIHtcbiAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgcmVtb3ZlTG9hZExpc3RlbmVyRm4oKTtcbiAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgICBjb25zdCByZW5kZXJlZEhlaWdodCA9IGltZy5jbGllbnRIZWlnaHQ7XG4gICAgaWYgKGRpci5maWxsICYmIHJlbmRlcmVkSGVpZ2h0ID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgaGVpZ2h0IG9mIHRoZSBmaWxsLW1vZGUgaW1hZ2UgaXMgemVyby4gYCArXG4gICAgICAgICAgICBgVGhpcyBpcyBsaWtlbHkgYmVjYXVzZSB0aGUgY29udGFpbmluZyBlbGVtZW50IGRvZXMgbm90IGhhdmUgdGhlIENTUyAncG9zaXRpb24nIGAgK1xuICAgICAgICAgICAgYHByb3BlcnR5IHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzogXCJyZWxhdGl2ZVwiLCBcImZpeGVkXCIsIG9yIFwiYWJzb2x1dGVcIi4gYCArXG4gICAgICAgICAgICBgVG8gZml4IHRoaXMgcHJvYmxlbSwgbWFrZSBzdXJlIHRoZSBjb250YWluZXIgZWxlbWVudCBoYXMgdGhlIENTUyAncG9zaXRpb24nIGAgK1xuICAgICAgICAgICAgYHByb3BlcnR5IGRlZmluZWQgYW5kIHRoZSBoZWlnaHQgb2YgdGhlIGVsZW1lbnQgaXMgbm90IHplcm8uYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlbW92ZUxvYWRMaXN0ZW5lckZuID0gcmVuZGVyZXIubGlzdGVuKGltZywgJ2xvYWQnLCBjYWxsYmFjayk7XG5cbiAgLy8gU2VlIGNvbW1lbnRzIGluIHRoZSBgYXNzZXJ0Tm9JbWFnZURpc3RvcnRpb25gLlxuICBjb25zdCByZW1vdmVFcnJvckxpc3RlbmVyRm4gPSByZW5kZXJlci5saXN0ZW4oaW1nLCAnZXJyb3InLCAoKSA9PiB7XG4gICAgcmVtb3ZlTG9hZExpc3RlbmVyRm4oKTtcbiAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgfSk7XG5cbiAgY2FsbE9uTG9hZElmSW1hZ2VJc0xvYWRlZChpbWcsIGNhbGxiYWNrKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSBgbG9hZGluZ2AgYXR0cmlidXRlIGlzIHNldCB0byBhIHZhbGlkIGlucHV0ICZcbiAqIGlzIG5vdCB1c2VkIG9uIHByaW9yaXR5IGltYWdlcy5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0VmFsaWRMb2FkaW5nSW5wdXQoZGlyOiBOZ09wdGltaXplZEltYWdlKSB7XG4gIGlmIChkaXIubG9hZGluZyAmJiBkaXIucHJpb3JpdHkpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgXFxgbG9hZGluZ1xcYCBhdHRyaWJ1dGUgYCArXG4gICAgICAgIGB3YXMgdXNlZCBvbiBhbiBpbWFnZSB0aGF0IHdhcyBtYXJrZWQgXCJwcmlvcml0eVwiLiBgICtcbiAgICAgICAgYFNldHRpbmcgXFxgbG9hZGluZ1xcYCBvbiBwcmlvcml0eSBpbWFnZXMgaXMgbm90IGFsbG93ZWQgYCArXG4gICAgICAgIGBiZWNhdXNlIHRoZXNlIGltYWdlcyB3aWxsIGFsd2F5cyBiZSBlYWdlcmx5IGxvYWRlZC4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgcmVtb3ZlIHRoZSDigJxsb2FkaW5n4oCdIGF0dHJpYnV0ZSBmcm9tIHRoZSBwcmlvcml0eSBpbWFnZS5gLFxuICAgICk7XG4gIH1cbiAgY29uc3QgdmFsaWRJbnB1dHMgPSBbJ2F1dG8nLCAnZWFnZXInLCAnbGF6eSddO1xuICBpZiAodHlwZW9mIGRpci5sb2FkaW5nID09PSAnc3RyaW5nJyAmJiAhdmFsaWRJbnB1dHMuaW5jbHVkZXMoZGlyLmxvYWRpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYGxvYWRpbmdcXGAgYXR0cmlidXRlIGAgK1xuICAgICAgICBgaGFzIGFuIGludmFsaWQgdmFsdWUgKFxcYCR7ZGlyLmxvYWRpbmd9XFxgKS4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgcHJvdmlkZSBhIHZhbGlkIHZhbHVlIChcImxhenlcIiwgXCJlYWdlclwiLCBvciBcImF1dG9cIikuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogV2FybnMgaWYgTk9UIHVzaW5nIGEgbG9hZGVyIChmYWxsaW5nIGJhY2sgdG8gdGhlIGdlbmVyaWMgbG9hZGVyKSBhbmRcbiAqIHRoZSBpbWFnZSBhcHBlYXJzIHRvIGJlIGhvc3RlZCBvbiBvbmUgb2YgdGhlIGltYWdlIENETnMgZm9yIHdoaWNoXG4gKiB3ZSBkbyBoYXZlIGEgYnVpbHQtaW4gaW1hZ2UgbG9hZGVyLiBTdWdnZXN0cyBzd2l0Y2hpbmcgdG8gdGhlXG4gKiBidWlsdC1pbiBsb2FkZXIuXG4gKlxuICogQHBhcmFtIG5nU3JjIFZhbHVlIG9mIHRoZSBuZ1NyYyBhdHRyaWJ1dGVcbiAqIEBwYXJhbSBpbWFnZUxvYWRlciBJbWFnZUxvYWRlciBwcm92aWRlZFxuICovXG5mdW5jdGlvbiBhc3NlcnROb3RNaXNzaW5nQnVpbHRJbkxvYWRlcihuZ1NyYzogc3RyaW5nLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgaWYgKGltYWdlTG9hZGVyID09PSBub29wSW1hZ2VMb2FkZXIpIHtcbiAgICBsZXQgYnVpbHRJbkxvYWRlck5hbWUgPSAnJztcbiAgICBmb3IgKGNvbnN0IGxvYWRlciBvZiBCVUlMVF9JTl9MT0FERVJTKSB7XG4gICAgICBpZiAobG9hZGVyLnRlc3RVcmwobmdTcmMpKSB7XG4gICAgICAgIGJ1aWx0SW5Mb2FkZXJOYW1lID0gbG9hZGVyLm5hbWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYnVpbHRJbkxvYWRlck5hbWUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICAgIFJ1bnRpbWVFcnJvckNvZGUuTUlTU0lOR19CVUlMVElOX0xPQURFUixcbiAgICAgICAgICBgTmdPcHRpbWl6ZWRJbWFnZTogSXQgbG9va3MgbGlrZSB5b3VyIGltYWdlcyBtYXkgYmUgaG9zdGVkIG9uIHRoZSBgICtcbiAgICAgICAgICAgIGAke2J1aWx0SW5Mb2FkZXJOYW1lfSBDRE4sIGJ1dCB5b3VyIGFwcCBpcyBub3QgdXNpbmcgQW5ndWxhcidzIGAgK1xuICAgICAgICAgICAgYGJ1aWx0LWluIGxvYWRlciBmb3IgdGhhdCBDRE4uIFdlIHJlY29tbWVuZCBzd2l0Y2hpbmcgdG8gdXNlIGAgK1xuICAgICAgICAgICAgYHRoZSBidWlsdC1pbiBieSBjYWxsaW5nIFxcYHByb3ZpZGUke2J1aWx0SW5Mb2FkZXJOYW1lfUxvYWRlcigpXFxgIGAgK1xuICAgICAgICAgICAgYGluIHlvdXIgXFxgcHJvdmlkZXJzXFxgIGFuZCBwYXNzaW5nIGl0IHlvdXIgaW5zdGFuY2UncyBiYXNlIFVSTC4gYCArXG4gICAgICAgICAgICBgSWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBidWlsdC1pbiBsb2FkZXIsIGRlZmluZSBhIGN1c3RvbSBgICtcbiAgICAgICAgICAgIGBsb2FkZXIgZnVuY3Rpb24gdXNpbmcgSU1BR0VfTE9BREVSIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLmAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFdhcm5zIGlmIG5nU3Jjc2V0IGlzIHByZXNlbnQgYW5kIG5vIGxvYWRlciBpcyBjb25maWd1cmVkIChpLmUuIHRoZSBkZWZhdWx0IG9uZSBpcyBiZWluZyB1c2VkKS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9OZ1NyY3NldFdpdGhvdXRMb2FkZXIoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgaWYgKGRpci5uZ1NyY3NldCAmJiBpbWFnZUxvYWRlciA9PT0gbm9vcEltYWdlTG9hZGVyKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICBSdW50aW1lRXJyb3JDb2RlLk1JU1NJTkdfTkVDRVNTQVJZX0xPQURFUixcbiAgICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgXFxgbmdTcmNzZXRcXGAgYXR0cmlidXRlIGlzIHByZXNlbnQgYnV0IGAgK1xuICAgICAgICAgIGBubyBpbWFnZSBsb2FkZXIgaXMgY29uZmlndXJlZCAoaS5lLiB0aGUgZGVmYXVsdCBvbmUgaXMgYmVpbmcgdXNlZCksIGAgK1xuICAgICAgICAgIGB3aGljaCB3b3VsZCByZXN1bHQgaW4gdGhlIHNhbWUgaW1hZ2UgYmVpbmcgdXNlZCBmb3IgYWxsIGNvbmZpZ3VyZWQgc2l6ZXMuIGAgK1xuICAgICAgICAgIGBUbyBmaXggdGhpcywgcHJvdmlkZSBhIGxvYWRlciBvciByZW1vdmUgdGhlIFxcYG5nU3Jjc2V0XFxgIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbWFnZS5gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogV2FybnMgaWYgbG9hZGVyUGFyYW1zIGlzIHByZXNlbnQgYW5kIG5vIGxvYWRlciBpcyBjb25maWd1cmVkIChpLmUuIHRoZSBkZWZhdWx0IG9uZSBpcyBiZWluZ1xuICogdXNlZCkuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vTG9hZGVyUGFyYW1zV2l0aG91dExvYWRlcihkaXI6IE5nT3B0aW1pemVkSW1hZ2UsIGltYWdlTG9hZGVyOiBJbWFnZUxvYWRlcikge1xuICBpZiAoZGlyLmxvYWRlclBhcmFtcyAmJiBpbWFnZUxvYWRlciA9PT0gbm9vcEltYWdlTG9hZGVyKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICBSdW50aW1lRXJyb3JDb2RlLk1JU1NJTkdfTkVDRVNTQVJZX0xPQURFUixcbiAgICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgXFxgbG9hZGVyUGFyYW1zXFxgIGF0dHJpYnV0ZSBpcyBwcmVzZW50IGJ1dCBgICtcbiAgICAgICAgICBgbm8gaW1hZ2UgbG9hZGVyIGlzIGNvbmZpZ3VyZWQgKGkuZS4gdGhlIGRlZmF1bHQgb25lIGlzIGJlaW5nIHVzZWQpLCBgICtcbiAgICAgICAgICBgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbG9hZGVyUGFyYW1zIGRhdGEgd2lsbCBub3QgYmUgY29uc3VtZWQgYW5kIHdpbGwgbm90IGFmZmVjdCB0aGUgVVJMLiBgICtcbiAgICAgICAgICBgVG8gZml4IHRoaXMsIHByb3ZpZGUgYSBjdXN0b20gbG9hZGVyIG9yIHJlbW92ZSB0aGUgXFxgbG9hZGVyUGFyYW1zXFxgIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbWFnZS5gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogV2FybnMgaWYgdGhlIHByaW9yaXR5IGF0dHJpYnV0ZSBpcyB1c2VkIHRvbyBvZnRlbiBvbiBwYWdlIGxvYWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYXNzZXRQcmlvcml0eUNvdW50QmVsb3dUaHJlc2hvbGQoYXBwUmVmOiBBcHBsaWNhdGlvblJlZikge1xuICBpZiAoSU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlQgPT09IDApIHtcbiAgICBJTUdTX1dJVEhfUFJJT1JJVFlfQVRUUl9DT1VOVCsrO1xuICAgIGF3YWl0IHdoZW5TdGFibGUoYXBwUmVmKTtcbiAgICBpZiAoSU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlQgPiBQUklPUklUWV9DT1VOVF9USFJFU0hPTEQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICAgIFJ1bnRpbWVFcnJvckNvZGUuVE9PX01BTllfUFJJT1JJVFlfQVRUUklCVVRFUyxcbiAgICAgICAgICBgTmdPcHRpbWl6ZWRJbWFnZTogVGhlIFwicHJpb3JpdHlcIiBhdHRyaWJ1dGUgaXMgc2V0IHRvIHRydWUgbW9yZSB0aGFuICR7UFJJT1JJVFlfQ09VTlRfVEhSRVNIT0xEfSB0aW1lcyAoJHtJTUdTX1dJVEhfUFJJT1JJVFlfQVRUUl9DT1VOVH0gdGltZXMpLiBgICtcbiAgICAgICAgICAgIGBNYXJraW5nIHRvbyBtYW55IGltYWdlcyBhcyBcImhpZ2hcIiBwcmlvcml0eSBjYW4gaHVydCB5b3VyIGFwcGxpY2F0aW9uJ3MgTENQIChodHRwczovL3dlYi5kZXYvbGNwKS4gYCArXG4gICAgICAgICAgICBgXCJQcmlvcml0eVwiIHNob3VsZCBvbmx5IGJlIHNldCBvbiB0aGUgaW1hZ2UgZXhwZWN0ZWQgdG8gYmUgdGhlIHBhZ2UncyBMQ1AgZWxlbWVudC5gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgSU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlQrKztcbiAgfVxufVxuXG4vKipcbiAqIFdhcm5zIGlmIHBsYWNlaG9sZGVyJ3MgZGltZW5zaW9uIGFyZSBvdmVyIGEgdGhyZXNob2xkLlxuICpcbiAqIFRoaXMgYXNzZXJ0IGZ1bmN0aW9uIGlzIG1lYW50IHRvIG9ubHkgcnVuIG9uIHRoZSBicm93c2VyLlxuICovXG5mdW5jdGlvbiBhc3NlcnRQbGFjZWhvbGRlckRpbWVuc2lvbnMoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWdFbGVtZW50OiBIVE1MSW1hZ2VFbGVtZW50KSB7XG4gIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbWdFbGVtZW50KTtcbiAgbGV0IHJlbmRlcmVkV2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnd2lkdGgnKSk7XG4gIGxldCByZW5kZXJlZEhlaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKSk7XG5cbiAgaWYgKHJlbmRlcmVkV2lkdGggPiBQTEFDRUhPTERFUl9ESU1FTlNJT05fTElNSVQgfHwgcmVuZGVyZWRIZWlnaHQgPiBQTEFDRUhPTERFUl9ESU1FTlNJT05fTElNSVQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBmb3JtYXRSdW50aW1lRXJyb3IoXG4gICAgICAgIFJ1bnRpbWVFcnJvckNvZGUuUExBQ0VIT0xERVJfRElNRU5TSU9OX0xJTUlUX0VYQ0VFREVELFxuICAgICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IGl0IHVzZXMgYSBwbGFjZWhvbGRlciBpbWFnZSwgYnV0IGF0IGxlYXN0IG9uZSBgICtcbiAgICAgICAgICBgb2YgdGhlIGRpbWVuc2lvbnMgYXR0cmlidXRlIChoZWlnaHQgb3Igd2lkdGgpIGV4Y2VlZHMgdGhlIGxpbWl0IG9mICR7UExBQ0VIT0xERVJfRElNRU5TSU9OX0xJTUlUfXB4LiBgICtcbiAgICAgICAgICBgVG8gZml4IHRoaXMsIHVzZSBhIHNtYWxsZXIgaW1hZ2UgYXMgYSBwbGFjZWhvbGRlci5gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxPbkxvYWRJZkltYWdlSXNMb2FkZWQoaW1nOiBIVE1MSW1hZ2VFbGVtZW50LCBjYWxsYmFjazogVm9pZEZ1bmN0aW9uKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2VtYmVkZGVkLWNvbnRlbnQuaHRtbCNkb20taW1nLWNvbXBsZXRlXG4gIC8vIFRoZSBzcGVjIGRlZmluZXMgdGhhdCBgY29tcGxldGVgIGlzIHRydXRoeSBvbmNlIGl0cyByZXF1ZXN0IHN0YXRlIGlzIGZ1bGx5IGF2YWlsYWJsZS5cbiAgLy8gVGhlIGltYWdlIG1heSBhbHJlYWR5IGJlIGF2YWlsYWJsZSBpZiBpdOKAmXMgbG9hZGVkIGZyb20gdGhlIGJyb3dzZXIgY2FjaGUuXG4gIC8vIEluIHRoYXQgY2FzZSwgdGhlIGBsb2FkYCBldmVudCB3aWxsIG5vdCBmaXJlIGF0IGFsbCwgbWVhbmluZyB0aGF0IGFsbCBzZXR1cFxuICAvLyBjYWxsYmFja3MgbGlzdGVuaW5nIGZvciB0aGUgYGxvYWRgIGV2ZW50IHdpbGwgbm90IGJlIGludm9rZWQuXG4gIC8vIEluIFNhZmFyaSwgdGhlcmUgaXMgYSBrbm93biBiZWhhdmlvciB3aGVyZSB0aGUgYGNvbXBsZXRlYCBwcm9wZXJ0eSBvZiBhblxuICAvLyBgSFRNTEltYWdlRWxlbWVudGAgbWF5IHNvbWV0aW1lcyByZXR1cm4gYHRydWVgIGV2ZW4gd2hlbiB0aGUgaW1hZ2UgaXMgbm90IGZ1bGx5IGxvYWRlZC5cbiAgLy8gQ2hlY2tpbmcgYm90aCBgaW1nLmNvbXBsZXRlYCBhbmQgYGltZy5uYXR1cmFsV2lkdGhgIGlzIHRoZSBtb3N0IHJlbGlhYmxlIHdheSB0b1xuICAvLyBkZXRlcm1pbmUgaWYgYW4gaW1hZ2UgaGFzIGJlZW4gZnVsbHkgbG9hZGVkLCBlc3BlY2lhbGx5IGluIGJyb3dzZXJzIHdoZXJlIHRoZVxuICAvLyBgY29tcGxldGVgIHByb3BlcnR5IG1heSByZXR1cm4gYHRydWVgIHByZW1hdHVyZWx5LlxuICBpZiAoaW1nLmNvbXBsZXRlICYmIGltZy5uYXR1cmFsV2lkdGgpIHtcbiAgICBjYWxsYmFjaygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJvdW5kKGlucHV0OiBudW1iZXIpOiBudW1iZXIgfCBzdHJpbmcge1xuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihpbnB1dCkgPyBpbnB1dCA6IGlucHV0LnRvRml4ZWQoMik7XG59XG5cbi8vIFRyYW5zZm9ybSBmdW5jdGlvbiB0byBoYW5kbGUgU2FmZVZhbHVlIGlucHV0IGZvciBuZ1NyYy4gVGhpcyBkb2Vzbid0IGRvIGFueSBzYW5pdGl6YXRpb24sXG4vLyBhcyB0aGF0IGlzIG5vdCBuZWVkZWQgZm9yIGltZy5zcmMgYW5kIGltZy5zcmNzZXQuIFRoaXMgdHJhbnNmb3JtIGlzIHB1cmVseSBmb3IgY29tcGF0aWJpbGl0eS5cbmZ1bmN0aW9uIHVud3JhcFNhZmVVcmwodmFsdWU6IHN0cmluZyB8IFNhZmVWYWx1ZSk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiB1bndyYXBTYWZlVmFsdWUodmFsdWUpO1xufVxuXG4vLyBUcmFuc2Zvcm0gZnVuY3Rpb24gdG8gaGFuZGxlIGlucHV0cyB3aGljaCBtYXkgYmUgYm9vbGVhbnMsIHN0cmluZ3MsIG9yIHN0cmluZyByZXByZXNlbnRhdGlvbnNcbi8vIG9mIGJvb2xlYW4gdmFsdWVzLiBVc2VkIGZvciB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlLlxuZXhwb3J0IGZ1bmN0aW9uIGJvb2xlYW5PclVybEF0dHJpYnV0ZSh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyk6IGJvb2xlYW4gfCBzdHJpbmcge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJ3RydWUnICYmIHZhbHVlICE9PSAnZmFsc2UnICYmIHZhbHVlICE9PSAnJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSk7XG59XG4iXX0=
|