@okta/okta-auth-js 6.7.1 → 6.7.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ # 6.7.2
4
+
5
+ ### Fixes
6
+
7
+ - [#1251](https://github.com/okta/okta-auth-js/pull/1251) IDX GenericRemediator patches (beta):
8
+ - allows flow entry point requests
9
+
3
10
  ## 6.7.1
4
11
 
5
12
  ### Fixes
@@ -10,6 +17,8 @@
10
17
  - adds missing types to `IdxAuthenticator`
11
18
  - adds missing action meta to `IdxTransaction.availableSteps`
12
19
 
20
+ - [#1247](https://github.com/okta/okta-auth-js/pull/1247) - Fixes OV enrollment flow issue in authentication flow.
21
+
13
22
  ## 6.7.0
14
23
 
15
24
  ### Features
@@ -21,7 +21,7 @@ var _features = require("./features");
21
21
  class OktaUserAgent {
22
22
  constructor() {
23
23
  // add base sdk env
24
- this.environments = [`okta-auth-js/${"6.7.1"}`];
24
+ this.environments = [`okta-auth-js/${"6.7.2"}`];
25
25
  }
26
26
 
27
27
  addEnvironment(env) {
@@ -36,7 +36,7 @@ class OktaUserAgent {
36
36
  }
37
37
 
38
38
  getVersion() {
39
- return "6.7.1";
39
+ return "6.7.2";
40
40
  }
41
41
 
42
42
  maybeAddNodeEnvironment() {
@@ -26,6 +26,8 @@ const AuthenticationFlow = {
26
26
  'challenge-poll': _remediators.ChallengePoll,
27
27
  'reenroll-authenticator': _remediators.ReEnrollAuthenticator,
28
28
  'enroll-poll': _remediators.EnrollPoll,
29
+ 'select-enrollment-channel': _remediators.SelectEnrollmentChannel,
30
+ 'enrollment-channel-data': _remediators.EnrollmentChannelData,
29
31
  'redirect-idp': _remediators.RedirectIdp,
30
32
  'skip': _remediators.Skip
31
33
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticationFlow.js","names":["AuthenticationFlow","Identify","SelectAuthenticatorAuthenticate","SelectAuthenticatorEnroll","AuthenticatorEnrollmentData","AuthenticatorVerificationData","EnrollAuthenticator","ChallengeAuthenticator","ChallengePoll","ReEnrollAuthenticator","EnrollPoll","RedirectIdp","Skip"],"sources":["../../../../lib/idx/flow/AuthenticationFlow.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\nimport { RemediationFlow } from './RemediationFlow';\nimport { \n Identify,\n SelectAuthenticatorAuthenticate,\n ChallengeAuthenticator,\n ReEnrollAuthenticator,\n RedirectIdp,\n AuthenticatorEnrollmentData,\n SelectAuthenticatorEnroll,\n EnrollAuthenticator,\n AuthenticatorVerificationData,\n EnrollPoll,\n ChallengePoll, \n Skip\n} from '../remediators';\n\nexport const AuthenticationFlow: RemediationFlow = {\n 'identify': Identify,\n 'select-authenticator-authenticate': SelectAuthenticatorAuthenticate,\n 'select-authenticator-enroll': SelectAuthenticatorEnroll,\n 'authenticator-enrollment-data': AuthenticatorEnrollmentData,\n 'authenticator-verification-data': AuthenticatorVerificationData,\n 'enroll-authenticator': EnrollAuthenticator,\n 'challenge-authenticator': ChallengeAuthenticator,\n 'challenge-poll': ChallengePoll,\n 'reenroll-authenticator': ReEnrollAuthenticator,\n 'enroll-poll': EnrollPoll,\n 'redirect-idp': RedirectIdp,\n 'skip': Skip,\n};\n"],"mappings":";;;;AAcA;;AAdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmBO,MAAMA,kBAAmC,GAAG;EACjD,YAAYC,qBADqC;EAEjD,qCAAqCC,4CAFY;EAGjD,+BAA+BC,sCAHkB;EAIjD,iCAAiCC,wCAJgB;EAKjD,mCAAmCC,0CALc;EAMjD,wBAAwBC,gCANyB;EAOjD,2BAA2BC,mCAPsB;EAQjD,kBAAkBC,0BAR+B;EASjD,0BAA0BC,kCATuB;EAUjD,eAAeC,uBAVkC;EAWjD,gBAAgBC,wBAXiC;EAYjD,QAAQC;AAZyC,CAA5C"}
1
+ {"version":3,"file":"AuthenticationFlow.js","names":["AuthenticationFlow","Identify","SelectAuthenticatorAuthenticate","SelectAuthenticatorEnroll","AuthenticatorEnrollmentData","AuthenticatorVerificationData","EnrollAuthenticator","ChallengeAuthenticator","ChallengePoll","ReEnrollAuthenticator","EnrollPoll","SelectEnrollmentChannel","EnrollmentChannelData","RedirectIdp","Skip"],"sources":["../../../../lib/idx/flow/AuthenticationFlow.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\nimport { RemediationFlow } from './RemediationFlow';\nimport { \n Identify,\n SelectAuthenticatorAuthenticate,\n ChallengeAuthenticator,\n ReEnrollAuthenticator,\n RedirectIdp,\n AuthenticatorEnrollmentData,\n SelectAuthenticatorEnroll,\n EnrollAuthenticator,\n AuthenticatorVerificationData,\n EnrollPoll,\n ChallengePoll,\n SelectEnrollmentChannel,\n EnrollmentChannelData,\n Skip\n} from '../remediators';\n\nexport const AuthenticationFlow: RemediationFlow = {\n 'identify': Identify,\n 'select-authenticator-authenticate': SelectAuthenticatorAuthenticate,\n 'select-authenticator-enroll': SelectAuthenticatorEnroll,\n 'authenticator-enrollment-data': AuthenticatorEnrollmentData,\n 'authenticator-verification-data': AuthenticatorVerificationData,\n 'enroll-authenticator': EnrollAuthenticator,\n 'challenge-authenticator': ChallengeAuthenticator,\n 'challenge-poll': ChallengePoll,\n 'reenroll-authenticator': ReEnrollAuthenticator,\n 'enroll-poll': EnrollPoll,\n 'select-enrollment-channel': SelectEnrollmentChannel,\n 'enrollment-channel-data': EnrollmentChannelData,\n 'redirect-idp': RedirectIdp,\n 'skip': Skip,\n};\n"],"mappings":";;;;AAcA;;AAdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAqBO,MAAMA,kBAAmC,GAAG;EACjD,YAAYC,qBADqC;EAEjD,qCAAqCC,4CAFY;EAGjD,+BAA+BC,sCAHkB;EAIjD,iCAAiCC,wCAJgB;EAKjD,mCAAmCC,0CALc;EAMjD,wBAAwBC,gCANyB;EAOjD,2BAA2BC,mCAPsB;EAQjD,kBAAkBC,0BAR+B;EASjD,0BAA0BC,kCATuB;EAUjD,eAAeC,uBAVkC;EAWjD,6BAA6BC,oCAXoB;EAYjD,2BAA2BC,kCAZsB;EAajD,gBAAgBC,wBAbiC;EAcjD,QAAQC;AAdyC,CAA5C"}
@@ -4,6 +4,8 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
4
4
 
5
5
  exports.GenericRemediator = void 0;
6
6
 
7
+ var _endsWith = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/ends-with"));
8
+
7
9
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
8
10
 
9
11
  var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
@@ -22,12 +24,12 @@ var _util = require("./util");
22
24
 
23
25
  class GenericRemediator extends _Remediator.Remediator {
24
26
  canRemediate() {
25
- var _context2, _context3;
27
+ var _context2, _context3, _context4;
26
28
 
27
29
  // only handle remediations that are able to submit form (xhr)
28
30
  if (typeof this.remediation.action !== 'function') {
29
31
  return false;
30
- } // DO NOT REMOVE - bring it back when enable client side validation for GenericRemediator
32
+ } // DO NOT REMOVE - bring it back when enable client side validation for GenericRemediator - OKTA-512003
31
33
  // const inputs = this.getInputs();
32
34
  // const res = inputs.reduce((acc, input) => {
33
35
  // return acc && hasValidInputValue(input, this.values);
@@ -35,18 +37,27 @@ class GenericRemediator extends _Remediator.Remediator {
35
37
  // return res;
36
38
 
37
39
 
38
- const inputKeys = (0, _map.default)(_context2 = this.getInputs()).call(_context2, ({
40
+ if (this.remediation.name === 'poll' || (0, _endsWith.default)(_context2 = this.remediation.name).call(_context2, '-poll')) {
41
+ return true;
42
+ }
43
+
44
+ const inputKeys = (0, _map.default)(_context3 = this.getInputs()).call(_context3, ({
39
45
  name
40
46
  }) => name);
41
- return (0, _reduce.default)(_context3 = (0, _keys.default)((0, _values.default)(this))).call(_context3, (acc, curr) => {
47
+
48
+ if (!inputKeys.length) {
49
+ return true;
50
+ }
51
+
52
+ return (0, _reduce.default)(_context4 = (0, _keys.default)((0, _values.default)(this))).call(_context4, (acc, curr) => {
42
53
  return acc || (0, _includes.default)(inputKeys).call(inputKeys, curr);
43
54
  }, false);
44
55
  }
45
56
 
46
57
  getData() {
47
- var _context4;
58
+ var _context5;
48
59
 
49
- const data = (0, _reduce.default)(_context4 = this.getInputs()).call(_context4, (acc, {
60
+ const data = (0, _reduce.default)(_context5 = this.getInputs()).call(_context5, (acc, {
50
61
  name
51
62
  }) => {
52
63
  acc[name] = (0, _values.default)(this)[name];
@@ -97,11 +108,11 @@ class GenericRemediator extends _Remediator.Remediator {
97
108
  }
98
109
 
99
110
  getInputs() {
100
- var _context5, _context6, _context7;
111
+ var _context6, _context7, _context8;
101
112
 
102
- return (0, _map.default)(_context5 = (0, _map.default)(_context6 = (0, _filter.default)(_context7 = this.remediation.value || []).call(_context7, ({
113
+ return (0, _map.default)(_context6 = (0, _map.default)(_context7 = (0, _filter.default)(_context8 = this.remediation.value || []).call(_context8, ({
103
114
  name
104
- }) => name !== 'stateHandle')).call(_context6, _util.unwrapFormValue)).call(_context5, input => {
115
+ }) => name !== 'stateHandle')).call(_context7, _util.unwrapFormValue)).call(_context6, input => {
105
116
  // use string as default input type
106
117
  input.type = input.type || 'string';
107
118
  return input;
@@ -1 +1 @@
1
- {"version":3,"file":"GenericRemediator.js","names":["GenericRemediator","Remediator","canRemediate","remediation","action","inputKeys","getInputs","name","acc","curr","getData","data","getNextStep","authClient","_context","getName","inputs","href","method","rel","accepts","produces","value","rest","length","params","idx","proceed","step","unwrapFormValue","input","type"],"sources":["../../../../../lib/idx/remediators/GenericRemediator/GenericRemediator.ts"],"sourcesContent":["import { IdxContext, NextStep, Input } from '../../types';\nimport { Remediator } from '../Base/Remediator';\nimport { unwrapFormValue } from './util';\nimport { OktaAuthIdxInterface } from '../../../types';\n\nexport class GenericRemediator extends Remediator {\n canRemediate(): boolean {\n // only handle remediations that are able to submit form (xhr)\n if (typeof this.remediation.action !== 'function') {\n return false;\n }\n\n // DO NOT REMOVE - bring it back when enable client side validation for GenericRemediator\n // const inputs = this.getInputs();\n // const res = inputs.reduce((acc, input) => {\n // return acc && hasValidInputValue(input, this.values);\n // }, true);\n // return res;\n \n const inputKeys = this.getInputs().map(({ name }) => name);\n return Object.keys(this.values).reduce((acc: boolean, curr) => {\n return acc || inputKeys.includes(curr);\n }, false);\n }\n\n getData() {\n const data = this.getInputs().reduce((acc, { name }) => {\n acc[name] = this.values[name];\n return acc;\n }, {});\n return data;\n }\n\n getNextStep(authClient: OktaAuthIdxInterface, _context?: IdxContext): NextStep {\n const name = this.getName();\n const inputs = this.getInputs();\n \n /* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */\n // excludes transformed fields\n const { \n // http metas have been transformed to action\n href, \n method, \n rel, \n accepts, \n produces, \n // value has been transform to inputs\n value,\n // will be transformed to a function that resolves IdxTransaction\n action,\n ...rest \n } = this.remediation;\n /* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */\n\n // step to handle form submission\n if (action) {\n return { \n ...rest,\n ...(!!inputs.length && { inputs }),\n action: async (params?) => {\n return authClient.idx.proceed({\n step: name,\n ...params\n });\n }\n };\n }\n\n // return whole remediation data for other steps, eg \"redirect-idp\"\n return { ...this.remediation } as NextStep;\n \n }\n\n getInputs(): Input[] {\n return (this.remediation.value || [])\n .filter(({ name }) => name !== 'stateHandle')\n .map(unwrapFormValue)\n .map(input => {\n // use string as default input type\n input.type = input.type || 'string';\n return input;\n });\n }\n\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AACA;;AACA;;AAGO,MAAMA,iBAAN,SAAgCC,sBAAhC,CAA2C;EAChDC,YAAY,GAAY;IAAA;;IACtB;IACA,IAAI,OAAO,KAAKC,WAAL,CAAiBC,MAAxB,KAAmC,UAAvC,EAAmD;MACjD,OAAO,KAAP;IACD,CAJqB,CAMtB;IACA;IACA;IACA;IACA;IACA;;;IAEA,MAAMC,SAAS,GAAG,mCAAKC,SAAL,oBAAqB,CAAC;MAAEC;IAAF,CAAD,KAAcA,IAAnC,CAAlB;IACA,OAAO,yEAAY,IAAZ,oBAAgC,CAACC,GAAD,EAAeC,IAAf,KAAwB;MAC7D,OAAOD,GAAG,IAAI,uBAAAH,SAAS,MAAT,CAAAA,SAAS,EAAUI,IAAV,CAAvB;IACD,CAFM,EAEJ,KAFI,CAAP;EAGD;;EAEDC,OAAO,GAAG;IAAA;;IACR,MAAMC,IAAI,GAAG,sCAAKL,SAAL,oBAAwB,CAACE,GAAD,EAAM;MAAED;IAAF,CAAN,KAAmB;MACtDC,GAAG,CAACD,IAAD,CAAH,GAAY,2BAAYA,IAAZ,CAAZ;MACA,OAAOC,GAAP;IACD,CAHY,EAGV,EAHU,CAAb;IAIA,OAAOG,IAAP;EACD;;EAEDC,WAAW,CAACC,UAAD,EAAmCC,QAAnC,EAAoE;IAC7E,MAAMP,IAAI,GAAG,KAAKQ,OAAL,EAAb;IACA,MAAMC,MAAM,GAAG,KAAKV,SAAL,EAAf;IAEA;IACA;;IACA,MAAM;MACJ;MACAW,IAFI;MAGJC,MAHI;MAIJC,GAJI;MAKJC,OALI;MAMJC,QANI;MAOJ;MACAC,KARI;MASJ;MACAlB,MAVI;MAWJ,GAAGmB;IAXC,IAYF,KAAKpB,WAZT;IAaA;IAEA;;IACA,IAAIC,MAAJ,EAAY;MACV,OAAO,EACL,GAAGmB,IADE;QAEL,IAAI,CAAC,CAACP,MAAM,CAACQ,MAAT,IAAmB;UAAER;QAAF,CAAvB,CAFK;QAGLZ,MAAM,EAAE,MAAOqB,MAAP,IAAmB;UACzB,OAAOZ,UAAU,CAACa,GAAX,CAAeC,OAAf,CAAuB;YAC5BC,IAAI,EAAErB,IADsB;YAE5B,GAAGkB;UAFyB,CAAvB,CAAP;QAID;MARI,CAAP;IAUD,CAjC4E,CAmC7E;;;IACA,OAAO,EAAE,GAAG,KAAKtB;IAAV,CAAP;EAED;;EAEDG,SAAS,GAAY;IAAA;;IACnB,OAAO,6FAAC,KAAKH,WAAL,CAAiBmB,KAAjB,IAA0B,EAA3B,kBACG,CAAC;MAAEf;IAAF,CAAD,KAAcA,IAAI,KAAK,aAD1B,mBAEAsB,qBAFA,mBAGAC,KAAK,IAAI;MACZ;MACAA,KAAK,CAACC,IAAN,GAAaD,KAAK,CAACC,IAAN,IAAc,QAA3B;MACA,OAAOD,KAAP;IACD,CAPI,CAAP;EAQD;;AA7E+C"}
1
+ {"version":3,"file":"GenericRemediator.js","names":["GenericRemediator","Remediator","canRemediate","remediation","action","name","inputKeys","getInputs","length","acc","curr","getData","data","getNextStep","authClient","_context","getName","inputs","href","method","rel","accepts","produces","value","rest","params","idx","proceed","step","unwrapFormValue","input","type"],"sources":["../../../../../lib/idx/remediators/GenericRemediator/GenericRemediator.ts"],"sourcesContent":["import { IdxContext, NextStep, Input } from '../../types';\nimport { Remediator } from '../Base/Remediator';\nimport { unwrapFormValue } from './util';\nimport { OktaAuthIdxInterface } from '../../../types';\n\nexport class GenericRemediator extends Remediator {\n canRemediate(): boolean {\n // only handle remediations that are able to submit form (xhr)\n if (typeof this.remediation.action !== 'function') {\n return false;\n }\n\n // DO NOT REMOVE - bring it back when enable client side validation for GenericRemediator - OKTA-512003\n // const inputs = this.getInputs();\n // const res = inputs.reduce((acc, input) => {\n // return acc && hasValidInputValue(input, this.values);\n // }, true);\n // return res;\n\n if (this.remediation.name === 'poll' || this.remediation.name.endsWith('-poll')) {\n return true;\n }\n \n const inputKeys = this.getInputs().map(({ name }) => name);\n\n if (!inputKeys.length) {\n return true;\n }\n\n return Object.keys(this.values).reduce((acc: boolean, curr) => {\n return acc || inputKeys.includes(curr);\n }, false);\n }\n\n getData() {\n const data = this.getInputs().reduce((acc, { name }) => {\n acc[name] = this.values[name];\n return acc;\n }, {});\n return data;\n }\n\n getNextStep(authClient: OktaAuthIdxInterface, _context?: IdxContext): NextStep {\n const name = this.getName();\n const inputs = this.getInputs();\n \n /* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */\n // excludes transformed fields\n const { \n // http metas have been transformed to action\n href, \n method, \n rel, \n accepts, \n produces, \n // value has been transform to inputs\n value,\n // will be transformed to a function that resolves IdxTransaction\n action,\n ...rest \n } = this.remediation;\n /* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */\n\n // step to handle form submission\n if (action) {\n return { \n ...rest,\n ...(!!inputs.length && { inputs }),\n action: async (params?) => {\n return authClient.idx.proceed({\n step: name,\n ...params\n });\n }\n };\n }\n\n // return whole remediation data for other steps, eg \"redirect-idp\"\n return { ...this.remediation } as NextStep;\n \n }\n\n getInputs(): Input[] {\n return (this.remediation.value || [])\n .filter(({ name }) => name !== 'stateHandle')\n .map(unwrapFormValue)\n .map(input => {\n // use string as default input type\n input.type = input.type || 'string';\n return input;\n });\n }\n\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AAGO,MAAMA,iBAAN,SAAgCC,sBAAhC,CAA2C;EAChDC,YAAY,GAAY;IAAA;;IACtB;IACA,IAAI,OAAO,KAAKC,WAAL,CAAiBC,MAAxB,KAAmC,UAAvC,EAAmD;MACjD,OAAO,KAAP;IACD,CAJqB,CAMtB;IACA;IACA;IACA;IACA;IACA;;;IAEA,IAAI,KAAKD,WAAL,CAAiBE,IAAjB,KAA0B,MAA1B,IAAoC,wCAAKF,WAAL,CAAiBE,IAAjB,kBAA+B,OAA/B,CAAxC,EAAiF;MAC/E,OAAO,IAAP;IACD;;IAED,MAAMC,SAAS,GAAG,mCAAKC,SAAL,oBAAqB,CAAC;MAAEF;IAAF,CAAD,KAAcA,IAAnC,CAAlB;;IAEA,IAAI,CAACC,SAAS,CAACE,MAAf,EAAuB;MACrB,OAAO,IAAP;IACD;;IAED,OAAO,yEAAY,IAAZ,oBAAgC,CAACC,GAAD,EAAeC,IAAf,KAAwB;MAC7D,OAAOD,GAAG,IAAI,uBAAAH,SAAS,MAAT,CAAAA,SAAS,EAAUI,IAAV,CAAvB;IACD,CAFM,EAEJ,KAFI,CAAP;EAGD;;EAEDC,OAAO,GAAG;IAAA;;IACR,MAAMC,IAAI,GAAG,sCAAKL,SAAL,oBAAwB,CAACE,GAAD,EAAM;MAAEJ;IAAF,CAAN,KAAmB;MACtDI,GAAG,CAACJ,IAAD,CAAH,GAAY,2BAAYA,IAAZ,CAAZ;MACA,OAAOI,GAAP;IACD,CAHY,EAGV,EAHU,CAAb;IAIA,OAAOG,IAAP;EACD;;EAEDC,WAAW,CAACC,UAAD,EAAmCC,QAAnC,EAAoE;IAC7E,MAAMV,IAAI,GAAG,KAAKW,OAAL,EAAb;IACA,MAAMC,MAAM,GAAG,KAAKV,SAAL,EAAf;IAEA;IACA;;IACA,MAAM;MACJ;MACAW,IAFI;MAGJC,MAHI;MAIJC,GAJI;MAKJC,OALI;MAMJC,QANI;MAOJ;MACAC,KARI;MASJ;MACAnB,MAVI;MAWJ,GAAGoB;IAXC,IAYF,KAAKrB,WAZT;IAaA;IAEA;;IACA,IAAIC,MAAJ,EAAY;MACV,OAAO,EACL,GAAGoB,IADE;QAEL,IAAI,CAAC,CAACP,MAAM,CAACT,MAAT,IAAmB;UAAES;QAAF,CAAvB,CAFK;QAGLb,MAAM,EAAE,MAAOqB,MAAP,IAAmB;UACzB,OAAOX,UAAU,CAACY,GAAX,CAAeC,OAAf,CAAuB;YAC5BC,IAAI,EAAEvB,IADsB;YAE5B,GAAGoB;UAFyB,CAAvB,CAAP;QAID;MARI,CAAP;IAUD,CAjC4E,CAmC7E;;;IACA,OAAO,EAAE,GAAG,KAAKtB;IAAV,CAAP;EAED;;EAEDI,SAAS,GAAY;IAAA;;IACnB,OAAO,6FAAC,KAAKJ,WAAL,CAAiBoB,KAAjB,IAA0B,EAA3B,kBACG,CAAC;MAAElB;IAAF,CAAD,KAAcA,IAAI,KAAK,aAD1B,mBAEAwB,qBAFA,mBAGAC,KAAK,IAAI;MACZ;MACAA,KAAK,CAACC,IAAN,GAAaD,KAAK,CAACC,IAAN,IAAc,QAA3B;MACA,OAAOD,KAAP;IACD,CAPI,CAAP;EAQD;;AAtF+C"}