diff --git a/packages/schema/bind/src/bindings/rust/functions.ts b/packages/schema/bind/src/bindings/rust/functions.ts index 7c8d50fa8b..e346469954 100644 --- a/packages/schema/bind/src/bindings/rust/functions.ts +++ b/packages/schema/bind/src/bindings/rust/functions.ts @@ -314,6 +314,19 @@ export const serdeKeyword: MustacheFn = () => { }; }; +export const serdeRenameIfCaseMismatch: MustacheFn = () => { + return (value: string, render: (template: string) => string): string => { + const type = render(value); + + if (hasUppercase(type) || isKeyword(type)) { + return `#[serde(rename = "${type}")]\n `; + } + return ""; + }; +}; + +const hasUppercase = (value: string): boolean => value !== value.toLowerCase(); + const toWasmArray = (type: string, optional: boolean): string => { const result = type.match(/(\[)([[\]A-Za-z1-9_.!]+)(\])/); diff --git a/packages/schema/bind/src/bindings/rust/plugin/templates/module-rs.mustache b/packages/schema/bind/src/bindings/rust/plugin/templates/module-rs.mustache index 1ecca04168..d0f2e7f644 100644 --- a/packages/schema/bind/src/bindings/rust/plugin/templates/module-rs.mustache +++ b/packages/schema/bind/src/bindings/rust/plugin/templates/module-rs.mustache @@ -13,7 +13,7 @@ use super::types::*; #[derive(Clone, Debug, Deserialize, Serialize)] pub struct Args{{#toUpper}}{{name}}{{/toUpper}} { {{#arguments}} - {{#serdeKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/serdeKeyword}}pub {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}: {{#toWasm}}{{toGraphQLType}}{{/toWasm}}, + {{#serdeRenameIfCaseMismatch}}{{name}}{{/serdeRenameIfCaseMismatch}}pub {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}: {{#toWasm}}{{toGraphQLType}}{{/toWasm}}, {{/arguments}} } diff --git a/packages/schema/bind/src/bindings/rust/plugin/templates/types-rs.mustache b/packages/schema/bind/src/bindings/rust/plugin/templates/types-rs.mustache index 50c1d9de5d..d22021b794 100644 --- a/packages/schema/bind/src/bindings/rust/plugin/templates/types-rs.mustache +++ b/packages/schema/bind/src/bindings/rust/plugin/templates/types-rs.mustache @@ -21,7 +21,7 @@ use polywrap_plugin::error::PluginError; #[derive(Clone, Debug, Deserialize, Serialize)] pub struct {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}} { {{#properties}} - {{#serdeKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/serdeKeyword}}pub {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}: {{#toWasm}}{{toGraphQLType}}{{/toWasm}}, + {{#serdeRenameIfCaseMismatch}}{{name}}{{/serdeRenameIfCaseMismatch}}pub {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}: {{#toWasm}}{{toGraphQLType}}{{/toWasm}}, {{/properties}} } {{/envType}} @@ -33,7 +33,7 @@ pub struct {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}} #[derive(Clone, Debug, Deserialize, Serialize)] pub struct {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}} { {{#properties}} - {{#serdeKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/serdeKeyword}}pub {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}: {{#toWasm}}{{toGraphQLType}}{{/toWasm}}, + {{#serdeRenameIfCaseMismatch}}{{name}}{{/serdeRenameIfCaseMismatch}}pub {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}: {{#toWasm}}{{toGraphQLType}}{{/toWasm}}, {{/properties}} } {{/objectTypes}} @@ -45,7 +45,7 @@ pub struct {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}} #[derive(Clone, Copy, Debug, Deserialize, Serialize)] pub enum {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}} { {{#constants}} - {{#serdeKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/serdeKeyword}}{{#detectKeyword}}{{.}}{{/detectKeyword}}, + {{#serdeRenameIfCaseMismatch}}{{name}}{{/serdeRenameIfCaseMismatch}}{{#detectKeyword}}{{.}}{{/detectKeyword}}, {{/constants}} _MAX_ } @@ -58,7 +58,7 @@ pub enum {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}} { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}} { {{#properties}} - {{#serdeKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/serdeKeyword}}pub {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}: {{#toWasm}}{{toGraphQLType}}{{/toWasm}}, + {{#serdeRenameIfCaseMismatch}}{{name}}{{/serdeRenameIfCaseMismatch}}pub {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}: {{#toWasm}}{{toGraphQLType}}{{/toWasm}}, {{/properties}} } {{/importedObjectTypes}} @@ -70,7 +70,7 @@ pub struct {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}} #[derive(Clone, Debug, Deserialize, Serialize)] pub struct {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}} { {{#properties}} - {{#serdeKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/serdeKeyword}}pub {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}: {{#toWasm}}{{toGraphQLType}}{{/toWasm}}, + {{#serdeRenameIfCaseMismatch}}{{name}}{{/serdeRenameIfCaseMismatch}}pub {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}: {{#toWasm}}{{toGraphQLType}}{{/toWasm}}, {{/properties}} } {{/importedEnvType}} @@ -82,7 +82,7 @@ pub struct {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}} #[derive(Clone, Copy, Debug, Deserialize, Serialize)] pub enum {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}} { {{#constants}} - {{#serdeKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/serdeKeyword}}{{#detectKeyword}}{{.}}{{/detectKeyword}}, + {{#serdeRenameIfCaseMismatch}}{{name}}{{/serdeRenameIfCaseMismatch}}{{#detectKeyword}}{{.}}{{/detectKeyword}}, {{/constants}} _MAX_ } @@ -97,7 +97,7 @@ pub enum {{#detectKeyword}}{{#toUpper}}{{type}}{{/toUpper}}{{/detectKeyword}} { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct {{#toUpper}}{{parent.type}}{{/toUpper}}Args{{#toUpper}}{{name}}{{/toUpper}} { {{#arguments}} - {{#serdeKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/serdeKeyword}}pub {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}: {{#toWasm}}{{toGraphQLType}}{{/toWasm}}, + {{#serdeRenameIfCaseMismatch}}{{name}}{{/serdeRenameIfCaseMismatch}}pub {{#detectKeyword}}{{#toLower}}{{name}}{{/toLower}}{{/detectKeyword}}: {{#toWasm}}{{toGraphQLType}}{{/toWasm}}, {{/arguments}} } diff --git a/packages/test-cases/cases/bind/sanity/input/schema.graphql b/packages/test-cases/cases/bind/sanity/input/schema.graphql index dc5d3c0d48..d9407d0f8a 100644 --- a/packages/test-cases/cases/bind/sanity/input/schema.graphql +++ b/packages/test-cases/cases/bind/sanity/input/schema.graphql @@ -109,9 +109,9 @@ type CustomType { optBytes: Bytes boolean: Boolean! optBoolean: Boolean - uArray: [UInt!]! - uOptArray: [UInt!] - optUOptArray: [UInt] + u_array: [UInt!]! + uOpt_array: [UInt!] + _opt_uOptArray: [UInt] optStrOptArray: [String] uArrayArray: [[UInt!]!]! uOptArrayOptArray: [[UInt32]]! diff --git a/packages/test-cases/cases/bind/sanity/output/app-ts/types.ts b/packages/test-cases/cases/bind/sanity/output/app-ts/types.ts index 79b06c4d96..63cbd9c017 100644 --- a/packages/test-cases/cases/bind/sanity/output/app-ts/types.ts +++ b/packages/test-cases/cases/bind/sanity/output/app-ts/types.ts @@ -45,9 +45,9 @@ export interface CustomType { optBytes?: Types.Bytes | null; boolean: Types.Boolean; optBoolean?: Types.Boolean | null; - uArray: Array; - uOptArray?: Array | null; - optUOptArray?: Array | null; + u_array: Array; + uOpt_array?: Array | null; + _opt_uOptArray?: Array | null; optStrOptArray?: Array | null; uArrayArray: Array>; uOptArrayOptArray: Array | null>; diff --git a/packages/test-cases/cases/bind/sanity/output/plugin-py/types.py b/packages/test-cases/cases/bind/sanity/output/plugin-py/types.py index e5d45f5403..a52aa5ad4b 100644 --- a/packages/test-cases/cases/bind/sanity/output/plugin-py/types.py +++ b/packages/test-cases/cases/bind/sanity/output/plugin-py/types.py @@ -43,9 +43,9 @@ "optBytes": Optional[bytes], "boolean": bool, "optBoolean": Optional[bool], - "uArray": list[int], - "uOptArray": Optional[list[int]], - "optUOptArray": Optional[list[Optional[int]]], + "u_array": list[int], + "uOpt_array": Optional[list[int]], + "_opt_uOptArray": Optional[list[Optional[int]]], "optStrOptArray": Optional[list[Optional[str]]], "uArrayArray": list[list[int]], "uOptArrayOptArray": list[Optional[list[Optional[int]]]], diff --git a/packages/test-cases/cases/bind/sanity/output/plugin-py/wrap_info.py b/packages/test-cases/cases/bind/sanity/output/plugin-py/wrap_info.py index b86538fd75..c7f563a264 100644 --- a/packages/test-cases/cases/bind/sanity/output/plugin-py/wrap_info.py +++ b/packages/test-cases/cases/bind/sanity/output/plugin-py/wrap_info.py @@ -7,7 +7,7 @@ from polywrap_manifest import WrapManifest -abi = json.loads(b64decode("eyJlbnVtVHlwZXMiOlt7ImNvbnN0YW50cyI6WyJTVFJJTkciLCJCWVRFUyJdLCJraW5kIjo4LCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LHsiY29uc3RhbnRzIjpbImZvciIsImluIl0sImtpbmQiOjgsInR5cGUiOiJ3aGlsZSJ9XSwiZW52VHlwZSI6eyJraW5kIjo2NTUzNiwicHJvcGVydGllcyI6W3sia2luZCI6MzQsIm5hbWUiOiJwcm9wIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoicHJvcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0UHJvcCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0UHJvcCIsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im9wdE1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjI2MjE0NiwibmFtZSI6Im9wdE1hcCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0TWFwIiwidHlwZSI6IkludCJ9LCJ0eXBlIjoiTWFwPFN0cmluZywgSW50PiIsInZhbHVlIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRNYXAiLCJ0eXBlIjoiSW50In19LCJuYW1lIjoib3B0TWFwIiwidHlwZSI6Ik1hcDxTdHJpbmcsIEludD4ifV0sInR5cGUiOiJFbnYifSwiaW1wb3J0ZWRFbnVtVHlwZXMiOlt7ImNvbnN0YW50cyI6WyJTVFJJTkciLCJCWVRFUyJdLCJraW5kIjo1MjAsIm5hbWVzcGFjZSI6IlRlc3RJbXBvcnQiLCJuYXRpdmVUeXBlIjoiRW51bSIsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0iLCJ1cmkiOiJ0ZXN0aW1wb3J0LnVyaS5ldGgifSx7ImNvbnN0YW50cyI6WyJTVFJJTkciLCJCWVRFUyJdLCJraW5kIjo1MjAsIm5hbWVzcGFjZSI6IlRlc3RJbXBvcnQiLCJuYXRpdmVUeXBlIjoiRW51bSIsInR5cGUiOiJUZXN0SW1wb3J0X0VudW1fUmV0dXJuIiwidXJpIjoidGVzdGltcG9ydC51cmkuZXRoIn1dLCJpbXBvcnRlZEVudlR5cGVzIjpbeyJraW5kIjo1MjQyODgsIm5hbWVzcGFjZSI6IlRlc3RJbXBvcnQiLCJuYXRpdmVUeXBlIjoiRW52IiwicHJvcGVydGllcyI6W3sia2luZCI6MzQsIm5hbWUiOiJlbnZpcm9Qcm9wIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiZW52aXJvUHJvcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifV0sInR5cGUiOiJUZXN0SW1wb3J0X0VudiIsInVyaSI6InRlc3RpbXBvcnQudXJpLmV0aCJ9XSwiaW1wb3J0ZWRNb2R1bGVUeXBlcyI6W3siaXNJbnRlcmZhY2UiOnRydWUsImtpbmQiOjI1NiwibWV0aG9kcyI6W3siYXJndW1lbnRzIjpbeyJraW5kIjozNCwibmFtZSI6InN0ciIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InN0ciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0U3RyIiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRTdHIiLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifSx7ImtpbmQiOjM0LCJuYW1lIjoidSIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InUiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQifSwidHlwZSI6IlVJbnQifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0VSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0VSIsInR5cGUiOiJVSW50In0sInR5cGUiOiJVSW50In0seyJhcnJheSI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInR5cGUiOiJVSW50In0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InVBcnJheUFycmF5IiwidHlwZSI6IlVJbnQifSwidHlwZSI6IltVSW50XSJ9LCJpdGVtIjp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6InVBcnJheUFycmF5IiwidHlwZSI6IlVJbnQifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5QXJyYXkiLCJ0eXBlIjoiVUludCJ9LCJ0eXBlIjoiW1VJbnRdIn0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludF1dIn0sImtpbmQiOjM0LCJuYW1lIjoidUFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludF1dIn0seyJraW5kIjozNCwibmFtZSI6Im9iamVjdCIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X09iamVjdCJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfT2JqZWN0In0seyJraW5kIjozNCwibmFtZSI6Im9wdE9iamVjdCIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0IiwidHlwZSI6IlRlc3RJbXBvcnRfT2JqZWN0In0sInR5cGUiOiJUZXN0SW1wb3J0X09iamVjdCJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfT2JqZWN0In0sImtpbmQiOjE4LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X09iamVjdCJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X09iamVjdF0ifSwia2luZCI6MzQsIm5hbWUiOiJvYmplY3RBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1Rlc3RJbXBvcnRfT2JqZWN0XSJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9PYmplY3QifSwia2luZCI6MTgsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9PYmplY3QifSwidHlwZSI6IltUZXN0SW1wb3J0X09iamVjdF0ifSwia2luZCI6MzQsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsInR5cGUiOiJbVGVzdEltcG9ydF9PYmplY3RdIn0seyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW4iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfRW51bSJ9LCJraW5kIjozNCwibmFtZSI6ImVuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0ifSx7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtIiwidHlwZSI6IlRlc3RJbXBvcnRfRW51bSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdEVudW0iLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0seyJhcnJheSI6eyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbVGVzdEltcG9ydF9FbnVtXSJ9LCJraW5kIjozNCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1Rlc3RJbXBvcnRfRW51bV0ifSx7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sIml0ZW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1dIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1dIn1dLCJlbnYiOnsicmVxdWlyZWQiOnRydWV9LCJraW5kIjo2NCwibmFtZSI6ImltcG9ydGVkTWV0aG9kIiwicmVxdWlyZWQiOnRydWUsInJldHVybiI6eyJraW5kIjozNCwibmFtZSI6ImltcG9ydGVkTWV0aG9kIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJpbXBvcnRlZE1ldGhvZCIsInR5cGUiOiJUZXN0SW1wb3J0X09iamVjdCJ9LCJ0eXBlIjoiVGVzdEltcG9ydF9PYmplY3QifSwidHlwZSI6Ik1ldGhvZCJ9LHsiYXJndW1lbnRzIjpbeyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJhcmciLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoxOCwibmFtZSI6ImFyZyIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImFyZyIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJbU3RyaW5nXSJ9LCJraW5kIjozNCwibmFtZSI6ImFyZyIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1N0cmluZ10ifV0sImtpbmQiOjY0LCJuYW1lIjoiYW5vdGhlck1ldGhvZCIsInJlcXVpcmVkIjp0cnVlLCJyZXR1cm4iOnsia2luZCI6MzQsIm5hbWUiOiJhbm90aGVyTWV0aG9kIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiYW5vdGhlck1ldGhvZCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50MzIifSwidHlwZSI6IkludDMyIn0sInR5cGUiOiJNZXRob2QifSx7ImFyZ3VtZW50cyI6W3sia2luZCI6MzQsIm5hbWUiOiJhcmciLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJhcmciLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiU3RyaW5nIn1dLCJraW5kIjo2NCwibmFtZSI6InJldHVybnNBcnJheU9mRW51bXMiLCJyZXF1aXJlZCI6dHJ1ZSwicmV0dXJuIjp7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJyZXR1cm5zQXJyYXlPZkVudW1zIiwidHlwZSI6IlRlc3RJbXBvcnRfRW51bV9SZXR1cm4ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6InJldHVybnNBcnJheU9mRW51bXMiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtX1JldHVybiJ9LCJraW5kIjoxOCwibmFtZSI6InJldHVybnNBcnJheU9mRW51bXMiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1fUmV0dXJuXSJ9LCJraW5kIjozNCwibmFtZSI6InJldHVybnNBcnJheU9mRW51bXMiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1fUmV0dXJuXSJ9LCJ0eXBlIjoiTWV0aG9kIn1dLCJuYW1lc3BhY2UiOiJUZXN0SW1wb3J0IiwibmF0aXZlVHlwZSI6Ik1vZHVsZSIsInR5cGUiOiJUZXN0SW1wb3J0X01vZHVsZSIsInVyaSI6InRlc3RpbXBvcnQudXJpLmV0aCJ9XSwiaW1wb3J0ZWRPYmplY3RUeXBlcyI6W3sia2luZCI6MTAyNSwibmFtZXNwYWNlIjoiVGVzdEltcG9ydCIsIm5hdGl2ZVR5cGUiOiJPYmplY3QiLCJwcm9wZXJ0aWVzIjpbeyJraW5kIjozNCwibmFtZSI6Im9iamVjdCIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0T2JqZWN0Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvcHRPYmplY3QiLCJ0eXBlIjoiVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0In0sInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSwia2luZCI6MTgsIm5hbWUiOiJvYmplY3RBcnJheSIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfQW5vdGhlck9iamVjdCJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3RdIn0sImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3RdIn0seyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSwia2luZCI6MTgsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0In0sInR5cGUiOiJbVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0XSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3RdIn0seyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW4iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfRW51bSJ9LCJraW5kIjozNCwibmFtZSI6ImVuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0ifSx7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtIiwidHlwZSI6IlRlc3RJbXBvcnRfRW51bSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdEVudW0iLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0seyJhcnJheSI6eyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbVGVzdEltcG9ydF9FbnVtXSJ9LCJraW5kIjozNCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1Rlc3RJbXBvcnRfRW51bV0ifSx7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sIml0ZW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1dIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1dIn1dLCJ0eXBlIjoiVGVzdEltcG9ydF9PYmplY3QiLCJ1cmkiOiJ0ZXN0aW1wb3J0LnVyaS5ldGgifSx7ImtpbmQiOjEwMjUsIm5hbWVzcGFjZSI6IlRlc3RJbXBvcnQiLCJuYXRpdmVUeXBlIjoiQW5vdGhlck9iamVjdCIsInByb3BlcnRpZXMiOlt7ImtpbmQiOjM0LCJuYW1lIjoicHJvcCIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InByb3AiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiU3RyaW5nIn1dLCJ0eXBlIjoiVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0IiwidXJpIjoidGVzdGltcG9ydC51cmkuZXRoIn1dLCJpbnRlcmZhY2VUeXBlcyI6W3siY2FwYWJpbGl0aWVzIjp7ImdldEltcGxlbWVudGF0aW9ucyI6eyJlbmFibGVkIjp0cnVlfX0sImtpbmQiOjMyNzY4LCJuYW1lc3BhY2UiOiJUZXN0SW1wb3J0IiwibmF0aXZlVHlwZSI6IkludGVyZmFjZSIsInR5cGUiOiJUZXN0SW1wb3J0IiwidXJpIjoidGVzdGltcG9ydC51cmkuZXRoIn1dLCJtb2R1bGVUeXBlIjp7ImltcG9ydHMiOlt7InR5cGUiOiJUZXN0SW1wb3J0X01vZHVsZSJ9LHsidHlwZSI6IlRlc3RJbXBvcnRfT2JqZWN0In0seyJ0eXBlIjoiVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0In0seyJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0seyJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtX1JldHVybiJ9XSwia2luZCI6MTI4LCJtZXRob2RzIjpbeyJhcmd1bWVudHMiOlt7ImtpbmQiOjM0LCJuYW1lIjoic3RyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoic3RyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRTdHIiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im9wdFN0ciIsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsiZW51bSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJDdXN0b21FbnVtIn0sImtpbmQiOjM0LCJuYW1lIjoiZW4iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkN1c3RvbUVudW0ifSx7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtIiwidHlwZSI6IkN1c3RvbUVudW0ifSwia2luZCI6MzQsIm5hbWUiOiJvcHRFbnVtIiwidHlwZSI6IkN1c3RvbUVudW0ifSx7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJlbnVtQXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkN1c3RvbUVudW0ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LCJraW5kIjoxOCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW0N1c3RvbUVudW1dIn0sImtpbmQiOjM0LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQ3VzdG9tRW51bV0ifSx7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LCJpdGVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IkN1c3RvbUVudW0ifSwia2luZCI6MTgsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiW0N1c3RvbUVudW1dIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltDdXN0b21FbnVtXSJ9LHsia2luZCI6MzQsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjI2MjE0NiwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJNYXA8U3RyaW5nLCBJbnQ+IiwidmFsdWUiOnsia2luZCI6NCwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In19LCJuYW1lIjoibWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBJbnQ+In0seyJraW5kIjozNCwibWFwIjp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifSwia2luZCI6MTgsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifSwidHlwZSI6IltJbnRdIn0sImtleSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoyNjIxNDYsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgW0ludF0+IiwidmFsdWUiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJraW5kIjoxOCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJ0eXBlIjoiW0ludF0ifX0sIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgW0ludF0+In0seyJraW5kIjozNCwibWFwIjp7ImtleSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZNYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoyNjIxNDYsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mTWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZNYXAiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZk1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJNYXA8U3RyaW5nLCBJbnQ+IiwidmFsdWUiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mTWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifX0sIm5hbWUiOiJtYXBPZk1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgTWFwPFN0cmluZywgSW50Pj4iLCJ2YWx1ZSI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mTWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZNYXAiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZk1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJNYXA8U3RyaW5nLCBJbnQ+IiwidmFsdWUiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mTWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifX19LCJuYW1lIjoibWFwT2ZNYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIEludD4+In0seyJraW5kIjozNCwibWFwIjp7ImtleSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoyNjIxNDYsIm5hbWUiOiJtYXBPZk9iaiIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoibWFwT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgQW5vdGhlclR5cGU+IiwidmFsdWUiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcE9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9fSwibmFtZSI6Im1hcE9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBBbm90aGVyVHlwZT4ifSx7ImtpbmQiOjM0LCJtYXAiOnsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwia2luZCI6MTgsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltBbm90aGVyVHlwZV0ifSwia2V5Ijp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgW0Fub3RoZXJUeXBlXT4iLCJ2YWx1ZSI6eyJpdGVtIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJraW5kIjoxOCwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9fSwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIFtBbm90aGVyVHlwZV0+In1dLCJraW5kIjo2NCwibmFtZSI6Im1vZHVsZU1ldGhvZCIsInJlcXVpcmVkIjp0cnVlLCJyZXR1cm4iOnsia2luZCI6MzQsIm5hbWUiOiJtb2R1bGVNZXRob2QiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtb2R1bGVNZXRob2QiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJ0eXBlIjoiSW50In0sInR5cGUiOiJNZXRob2QifSx7ImFyZ3VtZW50cyI6W3sia2luZCI6MzQsIm5hbWUiOiJvYmplY3QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRPYmplY3QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdCIsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJ0eXBlIjoiQW5vdGhlclR5cGUifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJraW5kIjoxOCwibmFtZSI6Im9iamVjdEFycmF5Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3RBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltBbm90aGVyVHlwZV0ifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9XSwiZW52Ijp7InJlcXVpcmVkIjp0cnVlfSwia2luZCI6NjQsIm5hbWUiOiJvYmplY3RNZXRob2QiLCJyZXF1aXJlZCI6dHJ1ZSwicmV0dXJuIjp7ImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0TWV0aG9kIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3RNZXRob2QiLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJNZXRob2QifSx7ImFyZ3VtZW50cyI6W3sia2luZCI6MzQsIm5hbWUiOiJvYmplY3QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRPYmplY3QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdCIsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJ0eXBlIjoiQW5vdGhlclR5cGUifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJraW5kIjoxOCwibmFtZSI6Im9iamVjdEFycmF5Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3RBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltBbm90aGVyVHlwZV0ifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9XSwiZW52Ijp7InJlcXVpcmVkIjpmYWxzZX0sImtpbmQiOjY0LCJuYW1lIjoib3B0aW9uYWxFbnZNZXRob2QiLCJyZXF1aXJlZCI6dHJ1ZSwicmV0dXJuIjp7ImtpbmQiOjM0LCJuYW1lIjoib3B0aW9uYWxFbnZNZXRob2QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdGlvbmFsRW52TWV0aG9kIiwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJ0eXBlIjoiTWV0aG9kIn0seyJhcmd1bWVudHMiOlt7ImtpbmQiOjM0LCJuYW1lIjoiaWYiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6ImlmIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJlbHNlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiZWxzZSJ9XSwia2luZCI6NjQsIm5hbWUiOiJpZiIsInJlcXVpcmVkIjp0cnVlLCJyZXR1cm4iOnsia2luZCI6MzQsIm5hbWUiOiJpZiIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoiaWYiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6ImVsc2UifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJlbHNlIn0sInR5cGUiOiJNZXRob2QifV0sInR5cGUiOiJNb2R1bGUifSwib2JqZWN0VHlwZXMiOlt7ImtpbmQiOjEsInByb3BlcnRpZXMiOlt7ImtpbmQiOjM0LCJuYW1lIjoic3RyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoic3RyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRTdHIiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im9wdFN0ciIsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm5hbWUiOiJ1IiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludCJ9LCJ0eXBlIjoiVUludCJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRVIiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRVIiwidHlwZSI6IlVJbnQifSwidHlwZSI6IlVJbnQifSx7ImtpbmQiOjM0LCJuYW1lIjoidTgiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1OCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDgifSwidHlwZSI6IlVJbnQ4In0seyJraW5kIjozNCwibmFtZSI6InUxNiIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InUxNiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDE2In0sInR5cGUiOiJVSW50MTYifSx7ImtpbmQiOjM0LCJuYW1lIjoidTMyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidTMyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IlVJbnQzMiJ9LHsia2luZCI6MzQsIm5hbWUiOiJpIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiaSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJJbnQifSx7ImtpbmQiOjM0LCJuYW1lIjoiaTgiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJpOCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50OCJ9LCJ0eXBlIjoiSW50OCJ9LHsia2luZCI6MzQsIm5hbWUiOiJpMTYiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJpMTYiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludDE2In0sInR5cGUiOiJJbnQxNiJ9LHsia2luZCI6MzQsIm5hbWUiOiJpMzIiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJpMzIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludDMyIn0sInR5cGUiOiJJbnQzMiJ9LHsia2luZCI6MzQsIm5hbWUiOiJiaWdpbnQiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJiaWdpbnQiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkJpZ0ludCJ9LCJ0eXBlIjoiQmlnSW50In0seyJraW5kIjozNCwibmFtZSI6Im9wdEJpZ2ludCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0QmlnaW50IiwidHlwZSI6IkJpZ0ludCJ9LCJ0eXBlIjoiQmlnSW50In0seyJraW5kIjozNCwibmFtZSI6ImJpZ251bWJlciIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImJpZ251bWJlciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQmlnTnVtYmVyIn0sInR5cGUiOiJCaWdOdW1iZXIifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0QmlnbnVtYmVyIiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRCaWdudW1iZXIiLCJ0eXBlIjoiQmlnTnVtYmVyIn0sInR5cGUiOiJCaWdOdW1iZXIifSx7ImtpbmQiOjM0LCJuYW1lIjoianNvbiIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Impzb24iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkpTT04ifSwidHlwZSI6IkpTT04ifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0SnNvbiIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0SnNvbiIsInR5cGUiOiJKU09OIn0sInR5cGUiOiJKU09OIn0seyJraW5kIjozNCwibmFtZSI6ImJ5dGVzIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiYnl0ZXMiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkJ5dGVzIn0sInR5cGUiOiJCeXRlcyJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRCeXRlcyIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0Qnl0ZXMiLCJ0eXBlIjoiQnl0ZXMifSwidHlwZSI6IkJ5dGVzIn0seyJraW5kIjozNCwibmFtZSI6ImJvb2xlYW4iLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJib29sZWFuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJCb29sZWFuIn0sInR5cGUiOiJCb29sZWFuIn0seyJraW5kIjozNCwibmFtZSI6Im9wdEJvb2xlYW4iLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im9wdEJvb2xlYW4iLCJ0eXBlIjoiQm9vbGVhbiJ9LCJ0eXBlIjoiQm9vbGVhbiJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50In0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5IiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50In0sInR5cGUiOiJbVUludF0ifSwia2luZCI6MzQsIm5hbWUiOiJ1QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltVSW50XSJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidU9wdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50In0sImtpbmQiOjE4LCJuYW1lIjoidU9wdEFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1T3B0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQifSwidHlwZSI6IltVSW50XSJ9LCJraW5kIjozNCwibmFtZSI6InVPcHRBcnJheSIsInR5cGUiOiJbVUludF0ifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6Im9wdFVPcHRBcnJheSIsInR5cGUiOiJVSW50In0sImtpbmQiOjE4LCJuYW1lIjoib3B0VU9wdEFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRVT3B0QXJyYXkiLCJ0eXBlIjoiVUludCJ9LCJ0eXBlIjoiW1VJbnRdIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0VU9wdEFycmF5IiwidHlwZSI6IltVSW50XSJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoib3B0U3RyT3B0QXJyYXkiLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0U3RyT3B0QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im9wdFN0ck9wdEFycmF5IiwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiW1N0cmluZ10ifSwia2luZCI6MzQsIm5hbWUiOiJvcHRTdHJPcHRBcnJheSIsInR5cGUiOiJbU3RyaW5nXSJ9LHsiYXJyYXkiOnsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InVBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50In0sInR5cGUiOiJbVUludF0ifSwiaXRlbSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludCJ9LCJraW5kIjoxOCwibmFtZSI6InVBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQifSwidHlwZSI6IltVSW50XSJ9LCJraW5kIjoxOCwibmFtZSI6InVBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbW1VJbnRdXSJ9LCJraW5kIjozNCwibmFtZSI6InVBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbW1VJbnRdXSJ9LHsiYXJyYXkiOnsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidU9wdEFycmF5T3B0QXJyYXkiLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoidU9wdEFycmF5T3B0QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InVPcHRBcnJheU9wdEFycmF5IiwidHlwZSI6IlVJbnQzMiJ9LCJ0eXBlIjoiW1VJbnQzMl0ifSwiaXRlbSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJ1T3B0QXJyYXlPcHRBcnJheSIsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJ1T3B0QXJyYXlPcHRBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidU9wdEFycmF5T3B0QXJyYXkiLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJraW5kIjoxOCwibmFtZSI6InVPcHRBcnJheU9wdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbW1VJbnQzMl1dIn0sImtpbmQiOjM0LCJuYW1lIjoidU9wdEFycmF5T3B0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludDMyXV0ifSx7ImFycmF5Ijp7ImFycmF5Ijp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJraW5kIjoxOCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sIml0ZW0iOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJ0eXBlIjoiW1VJbnQzMl0ifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwidHlwZSI6IltbVUludDMyXV0ifSwiaXRlbSI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJpdGVtIjp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJraW5kIjoxOCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInR5cGUiOiJbW1VJbnQzMl1dIn0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1tbVUludDMyXV1dIn0sImtpbmQiOjM0LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1tbVUludDMyXV1dIn0seyJhcnJheSI6eyJhcnJheSI6eyJhcnJheSI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sIml0ZW0iOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludDMyXV0ifSwiaXRlbSI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sIml0ZW0iOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludDMyXV0ifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5IiwidHlwZSI6IltbW1VJbnQzMl1dXSJ9LCJpdGVtIjp7ImFycmF5Ijp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJ0eXBlIjoiW1VJbnQzMl0ifSwiaXRlbSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1tVSW50MzJdXSJ9LCJpdGVtIjp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJ0eXBlIjoiW1VJbnQzMl0ifSwiaXRlbSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1tVSW50MzJdXSJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJ0eXBlIjoiW1tbVUludDMyXV1dIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInR5cGUiOiJbW1tbVUludDMyXV1dXSJ9LCJraW5kIjozNCwibmFtZSI6ImNyYXp5QXJyYXkiLCJ0eXBlIjoiW1tbW1VJbnQzMl1dXV0ifSx7ImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3QiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0T2JqZWN0Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvcHRPYmplY3QiLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwidHlwZSI6IkFub3RoZXJUeXBlIn0seyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3RBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwia2luZCI6MTgsIm5hbWUiOiJvYmplY3RBcnJheSIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9LCJraW5kIjozNCwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQW5vdGhlclR5cGVdIn0seyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJraW5kIjoxOCwibmFtZSI6Im9wdE9iamVjdEFycmF5Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IltBbm90aGVyVHlwZV0ifSx7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJlbiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LCJraW5kIjozNCwibmFtZSI6ImVuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJDdXN0b21FbnVtIn0seyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoib3B0RW51bSIsInR5cGUiOiJDdXN0b21FbnVtIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0RW51bSIsInR5cGUiOiJDdXN0b21FbnVtIn0seyJhcnJheSI6eyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJDdXN0b21FbnVtIn0sIml0ZW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJlbnVtQXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkN1c3RvbUVudW0ifSwia2luZCI6MTgsIm5hbWUiOiJlbnVtQXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltDdXN0b21FbnVtXSJ9LCJraW5kIjozNCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW0N1c3RvbUVudW1dIn0seyJhcnJheSI6eyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IkN1c3RvbUVudW0ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6Im9wdEVudW1BcnJheSIsInR5cGUiOiJDdXN0b21FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltDdXN0b21FbnVtXSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdEVudW1BcnJheSIsInR5cGUiOiJbQ3VzdG9tRW51bV0ifSx7ImtpbmQiOjM0LCJtYXAiOnsia2V5Ijp7ImtpbmQiOjQsIm5hbWUiOiJtYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoyNjIxNDYsIm5hbWUiOiJtYXAiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJ0eXBlIjoiTWFwPFN0cmluZywgSW50PiIsInZhbHVlIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9fSwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgSW50PiJ9LHsia2luZCI6MzQsIm1hcCI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sImtpbmQiOjE4LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJbSW50XSJ9LCJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIFtJbnRdPiIsInZhbHVlIjp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifSwia2luZCI6MTgsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifSwidHlwZSI6IltJbnRdIn19LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIFtJbnRdPiJ9LHsia2luZCI6MzQsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZPYmoiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcE9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIEFub3RoZXJUeXBlPiIsInZhbHVlIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifX0sIm5hbWUiOiJtYXBPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgQW5vdGhlclR5cGU+In0seyJraW5kIjozNCwibWFwIjp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sImtpbmQiOjE4LCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtleSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjI2MjE0NiwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIFtBbm90aGVyVHlwZV0+IiwidmFsdWUiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwia2luZCI6MTgsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltBbm90aGVyVHlwZV0ifX0sIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBbQW5vdGhlclR5cGVdPiJ9LHsia2luZCI6MzQsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcEN1c3RvbVZhbHVlIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwQ3VzdG9tVmFsdWUiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcEN1c3RvbVZhbHVlIiwidHlwZSI6IkN1c3RvbU1hcFZhbHVlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgQ3VzdG9tTWFwVmFsdWU+IiwidmFsdWUiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcEN1c3RvbVZhbHVlIiwidHlwZSI6IkN1c3RvbU1hcFZhbHVlIn19LCJuYW1lIjoibWFwQ3VzdG9tVmFsdWUiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIEN1c3RvbU1hcFZhbHVlPiJ9XSwidHlwZSI6IkN1c3RvbVR5cGUifSx7ImtpbmQiOjEsInByb3BlcnRpZXMiOlt7ImtpbmQiOjM0LCJuYW1lIjoicHJvcCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoicHJvcCIsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm5hbWUiOiJjaXJjdWxhciIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoiY2lyY3VsYXIiLCJ0eXBlIjoiQ3VzdG9tVHlwZSJ9LCJ0eXBlIjoiQ3VzdG9tVHlwZSJ9LHsia2luZCI6MzQsIm5hbWUiOiJjb25zdCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiY29uc3QiLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifV0sInR5cGUiOiJBbm90aGVyVHlwZSJ9LHsia2luZCI6MSwicHJvcGVydGllcyI6W3sia2luZCI6MzQsIm5hbWUiOiJmb28iLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJmb28iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiU3RyaW5nIn1dLCJ0eXBlIjoiQ3VzdG9tTWFwVmFsdWUifSx7ImtpbmQiOjEsInByb3BlcnRpZXMiOlt7ImtpbmQiOjM0LCJuYW1lIjoiZWxzZSIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImVsc2UiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiU3RyaW5nIn1dLCJ0eXBlIjoiZWxzZSJ9XSwidmVyc2lvbiI6IjAuMSJ9").decode("utf-8")) +abi = json.loads(b64decode("eyJlbnVtVHlwZXMiOlt7ImNvbnN0YW50cyI6WyJTVFJJTkciLCJCWVRFUyJdLCJraW5kIjo4LCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LHsiY29uc3RhbnRzIjpbImZvciIsImluIl0sImtpbmQiOjgsInR5cGUiOiJ3aGlsZSJ9XSwiZW52VHlwZSI6eyJraW5kIjo2NTUzNiwicHJvcGVydGllcyI6W3sia2luZCI6MzQsIm5hbWUiOiJwcm9wIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoicHJvcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0UHJvcCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0UHJvcCIsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im9wdE1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjI2MjE0NiwibmFtZSI6Im9wdE1hcCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0TWFwIiwidHlwZSI6IkludCJ9LCJ0eXBlIjoiTWFwPFN0cmluZywgSW50PiIsInZhbHVlIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRNYXAiLCJ0eXBlIjoiSW50In19LCJuYW1lIjoib3B0TWFwIiwidHlwZSI6Ik1hcDxTdHJpbmcsIEludD4ifV0sInR5cGUiOiJFbnYifSwiaW1wb3J0ZWRFbnVtVHlwZXMiOlt7ImNvbnN0YW50cyI6WyJTVFJJTkciLCJCWVRFUyJdLCJraW5kIjo1MjAsIm5hbWVzcGFjZSI6IlRlc3RJbXBvcnQiLCJuYXRpdmVUeXBlIjoiRW51bSIsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0iLCJ1cmkiOiJ0ZXN0aW1wb3J0LnVyaS5ldGgifSx7ImNvbnN0YW50cyI6WyJTVFJJTkciLCJCWVRFUyJdLCJraW5kIjo1MjAsIm5hbWVzcGFjZSI6IlRlc3RJbXBvcnQiLCJuYXRpdmVUeXBlIjoiRW51bSIsInR5cGUiOiJUZXN0SW1wb3J0X0VudW1fUmV0dXJuIiwidXJpIjoidGVzdGltcG9ydC51cmkuZXRoIn1dLCJpbXBvcnRlZEVudlR5cGVzIjpbeyJraW5kIjo1MjQyODgsIm5hbWVzcGFjZSI6IlRlc3RJbXBvcnQiLCJuYXRpdmVUeXBlIjoiRW52IiwicHJvcGVydGllcyI6W3sia2luZCI6MzQsIm5hbWUiOiJlbnZpcm9Qcm9wIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiZW52aXJvUHJvcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifV0sInR5cGUiOiJUZXN0SW1wb3J0X0VudiIsInVyaSI6InRlc3RpbXBvcnQudXJpLmV0aCJ9XSwiaW1wb3J0ZWRNb2R1bGVUeXBlcyI6W3siaXNJbnRlcmZhY2UiOnRydWUsImtpbmQiOjI1NiwibWV0aG9kcyI6W3siYXJndW1lbnRzIjpbeyJraW5kIjozNCwibmFtZSI6InN0ciIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InN0ciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0U3RyIiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRTdHIiLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifSx7ImtpbmQiOjM0LCJuYW1lIjoidSIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InUiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQifSwidHlwZSI6IlVJbnQifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0VSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0VSIsInR5cGUiOiJVSW50In0sInR5cGUiOiJVSW50In0seyJhcnJheSI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInR5cGUiOiJVSW50In0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InVBcnJheUFycmF5IiwidHlwZSI6IlVJbnQifSwidHlwZSI6IltVSW50XSJ9LCJpdGVtIjp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6InVBcnJheUFycmF5IiwidHlwZSI6IlVJbnQifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5QXJyYXkiLCJ0eXBlIjoiVUludCJ9LCJ0eXBlIjoiW1VJbnRdIn0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludF1dIn0sImtpbmQiOjM0LCJuYW1lIjoidUFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludF1dIn0seyJraW5kIjozNCwibmFtZSI6Im9iamVjdCIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X09iamVjdCJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfT2JqZWN0In0seyJraW5kIjozNCwibmFtZSI6Im9wdE9iamVjdCIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0IiwidHlwZSI6IlRlc3RJbXBvcnRfT2JqZWN0In0sInR5cGUiOiJUZXN0SW1wb3J0X09iamVjdCJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfT2JqZWN0In0sImtpbmQiOjE4LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X09iamVjdCJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X09iamVjdF0ifSwia2luZCI6MzQsIm5hbWUiOiJvYmplY3RBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1Rlc3RJbXBvcnRfT2JqZWN0XSJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9PYmplY3QifSwia2luZCI6MTgsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9PYmplY3QifSwidHlwZSI6IltUZXN0SW1wb3J0X09iamVjdF0ifSwia2luZCI6MzQsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsInR5cGUiOiJbVGVzdEltcG9ydF9PYmplY3RdIn0seyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW4iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfRW51bSJ9LCJraW5kIjozNCwibmFtZSI6ImVuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0ifSx7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtIiwidHlwZSI6IlRlc3RJbXBvcnRfRW51bSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdEVudW0iLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0seyJhcnJheSI6eyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbVGVzdEltcG9ydF9FbnVtXSJ9LCJraW5kIjozNCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1Rlc3RJbXBvcnRfRW51bV0ifSx7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sIml0ZW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1dIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1dIn1dLCJlbnYiOnsicmVxdWlyZWQiOnRydWV9LCJraW5kIjo2NCwibmFtZSI6ImltcG9ydGVkTWV0aG9kIiwicmVxdWlyZWQiOnRydWUsInJldHVybiI6eyJraW5kIjozNCwibmFtZSI6ImltcG9ydGVkTWV0aG9kIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJpbXBvcnRlZE1ldGhvZCIsInR5cGUiOiJUZXN0SW1wb3J0X09iamVjdCJ9LCJ0eXBlIjoiVGVzdEltcG9ydF9PYmplY3QifSwidHlwZSI6Ik1ldGhvZCJ9LHsiYXJndW1lbnRzIjpbeyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJhcmciLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoxOCwibmFtZSI6ImFyZyIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImFyZyIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJbU3RyaW5nXSJ9LCJraW5kIjozNCwibmFtZSI6ImFyZyIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1N0cmluZ10ifV0sImtpbmQiOjY0LCJuYW1lIjoiYW5vdGhlck1ldGhvZCIsInJlcXVpcmVkIjp0cnVlLCJyZXR1cm4iOnsia2luZCI6MzQsIm5hbWUiOiJhbm90aGVyTWV0aG9kIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiYW5vdGhlck1ldGhvZCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50MzIifSwidHlwZSI6IkludDMyIn0sInR5cGUiOiJNZXRob2QifSx7ImFyZ3VtZW50cyI6W3sia2luZCI6MzQsIm5hbWUiOiJhcmciLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJhcmciLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiU3RyaW5nIn1dLCJraW5kIjo2NCwibmFtZSI6InJldHVybnNBcnJheU9mRW51bXMiLCJyZXF1aXJlZCI6dHJ1ZSwicmV0dXJuIjp7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJyZXR1cm5zQXJyYXlPZkVudW1zIiwidHlwZSI6IlRlc3RJbXBvcnRfRW51bV9SZXR1cm4ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6InJldHVybnNBcnJheU9mRW51bXMiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtX1JldHVybiJ9LCJraW5kIjoxOCwibmFtZSI6InJldHVybnNBcnJheU9mRW51bXMiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1fUmV0dXJuXSJ9LCJraW5kIjozNCwibmFtZSI6InJldHVybnNBcnJheU9mRW51bXMiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1fUmV0dXJuXSJ9LCJ0eXBlIjoiTWV0aG9kIn1dLCJuYW1lc3BhY2UiOiJUZXN0SW1wb3J0IiwibmF0aXZlVHlwZSI6Ik1vZHVsZSIsInR5cGUiOiJUZXN0SW1wb3J0X01vZHVsZSIsInVyaSI6InRlc3RpbXBvcnQudXJpLmV0aCJ9XSwiaW1wb3J0ZWRPYmplY3RUeXBlcyI6W3sia2luZCI6MTAyNSwibmFtZXNwYWNlIjoiVGVzdEltcG9ydCIsIm5hdGl2ZVR5cGUiOiJPYmplY3QiLCJwcm9wZXJ0aWVzIjpbeyJraW5kIjozNCwibmFtZSI6Im9iamVjdCIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0T2JqZWN0Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvcHRPYmplY3QiLCJ0eXBlIjoiVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0In0sInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSwia2luZCI6MTgsIm5hbWUiOiJvYmplY3RBcnJheSIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfQW5vdGhlck9iamVjdCJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3RdIn0sImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3RdIn0seyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsInR5cGUiOiJUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3QifSwia2luZCI6MTgsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0In0sInR5cGUiOiJbVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0XSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0Fub3RoZXJPYmplY3RdIn0seyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW4iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlRlc3RJbXBvcnRfRW51bSJ9LCJraW5kIjozNCwibmFtZSI6ImVuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0ifSx7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtIiwidHlwZSI6IlRlc3RJbXBvcnRfRW51bSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdEVudW0iLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0seyJhcnJheSI6eyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJUZXN0SW1wb3J0X0VudW0ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbVGVzdEltcG9ydF9FbnVtXSJ9LCJraW5kIjozNCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1Rlc3RJbXBvcnRfRW51bV0ifSx7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sIml0ZW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1dIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltUZXN0SW1wb3J0X0VudW1dIn1dLCJ0eXBlIjoiVGVzdEltcG9ydF9PYmplY3QiLCJ1cmkiOiJ0ZXN0aW1wb3J0LnVyaS5ldGgifSx7ImtpbmQiOjEwMjUsIm5hbWVzcGFjZSI6IlRlc3RJbXBvcnQiLCJuYXRpdmVUeXBlIjoiQW5vdGhlck9iamVjdCIsInByb3BlcnRpZXMiOlt7ImtpbmQiOjM0LCJuYW1lIjoicHJvcCIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InByb3AiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiU3RyaW5nIn1dLCJ0eXBlIjoiVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0IiwidXJpIjoidGVzdGltcG9ydC51cmkuZXRoIn1dLCJpbnRlcmZhY2VUeXBlcyI6W3siY2FwYWJpbGl0aWVzIjp7ImdldEltcGxlbWVudGF0aW9ucyI6eyJlbmFibGVkIjp0cnVlfX0sImtpbmQiOjMyNzY4LCJuYW1lc3BhY2UiOiJUZXN0SW1wb3J0IiwibmF0aXZlVHlwZSI6IkludGVyZmFjZSIsInR5cGUiOiJUZXN0SW1wb3J0IiwidXJpIjoidGVzdGltcG9ydC51cmkuZXRoIn1dLCJtb2R1bGVUeXBlIjp7ImltcG9ydHMiOlt7InR5cGUiOiJUZXN0SW1wb3J0X01vZHVsZSJ9LHsidHlwZSI6IlRlc3RJbXBvcnRfT2JqZWN0In0seyJ0eXBlIjoiVGVzdEltcG9ydF9Bbm90aGVyT2JqZWN0In0seyJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtIn0seyJ0eXBlIjoiVGVzdEltcG9ydF9FbnVtX1JldHVybiJ9XSwia2luZCI6MTI4LCJtZXRob2RzIjpbeyJhcmd1bWVudHMiOlt7ImtpbmQiOjM0LCJuYW1lIjoic3RyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoic3RyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRTdHIiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im9wdFN0ciIsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsiZW51bSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJDdXN0b21FbnVtIn0sImtpbmQiOjM0LCJuYW1lIjoiZW4iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkN1c3RvbUVudW0ifSx7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtIiwidHlwZSI6IkN1c3RvbUVudW0ifSwia2luZCI6MzQsIm5hbWUiOiJvcHRFbnVtIiwidHlwZSI6IkN1c3RvbUVudW0ifSx7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJlbnVtQXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkN1c3RvbUVudW0ifSwiaXRlbSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LCJraW5kIjoxOCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW0N1c3RvbUVudW1dIn0sImtpbmQiOjM0LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQ3VzdG9tRW51bV0ifSx7ImFycmF5Ijp7ImVudW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LCJpdGVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IkN1c3RvbUVudW0ifSwia2luZCI6MTgsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiW0N1c3RvbUVudW1dIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0RW51bUFycmF5IiwidHlwZSI6IltDdXN0b21FbnVtXSJ9LHsia2luZCI6MzQsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjI2MjE0NiwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJNYXA8U3RyaW5nLCBJbnQ+IiwidmFsdWUiOnsia2luZCI6NCwibmFtZSI6Im1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In19LCJuYW1lIjoibWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBJbnQ+In0seyJraW5kIjozNCwibWFwIjp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifSwia2luZCI6MTgsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifSwidHlwZSI6IltJbnRdIn0sImtleSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoyNjIxNDYsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgW0ludF0+IiwidmFsdWUiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJraW5kIjoxOCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJ0eXBlIjoiW0ludF0ifX0sIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgW0ludF0+In0seyJraW5kIjozNCwibWFwIjp7ImtleSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZNYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoyNjIxNDYsIm1hcCI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mTWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZNYXAiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZk1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJNYXA8U3RyaW5nLCBJbnQ+IiwidmFsdWUiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mTWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifX0sIm5hbWUiOiJtYXBPZk1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgTWFwPFN0cmluZywgSW50Pj4iLCJ2YWx1ZSI6eyJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mTWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZNYXAiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZk1hcCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJNYXA8U3RyaW5nLCBJbnQ+IiwidmFsdWUiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mTWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifX19LCJuYW1lIjoibWFwT2ZNYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIEludD4+In0seyJraW5kIjozNCwibWFwIjp7ImtleSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoyNjIxNDYsIm5hbWUiOiJtYXBPZk9iaiIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoibWFwT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgQW5vdGhlclR5cGU+IiwidmFsdWUiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcE9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9fSwibmFtZSI6Im1hcE9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBBbm90aGVyVHlwZT4ifSx7ImtpbmQiOjM0LCJtYXAiOnsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwia2luZCI6MTgsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltBbm90aGVyVHlwZV0ifSwia2V5Ijp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgW0Fub3RoZXJUeXBlXT4iLCJ2YWx1ZSI6eyJpdGVtIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJraW5kIjoxOCwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9fSwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIFtBbm90aGVyVHlwZV0+In1dLCJraW5kIjo2NCwibmFtZSI6Im1vZHVsZU1ldGhvZCIsInJlcXVpcmVkIjp0cnVlLCJyZXR1cm4iOnsia2luZCI6MzQsIm5hbWUiOiJtb2R1bGVNZXRob2QiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtb2R1bGVNZXRob2QiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJ0eXBlIjoiSW50In0sInR5cGUiOiJNZXRob2QifSx7ImFyZ3VtZW50cyI6W3sia2luZCI6MzQsIm5hbWUiOiJvYmplY3QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRPYmplY3QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdCIsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJ0eXBlIjoiQW5vdGhlclR5cGUifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJraW5kIjoxOCwibmFtZSI6Im9iamVjdEFycmF5Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3RBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltBbm90aGVyVHlwZV0ifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9XSwiZW52Ijp7InJlcXVpcmVkIjp0cnVlfSwia2luZCI6NjQsIm5hbWUiOiJvYmplY3RNZXRob2QiLCJyZXF1aXJlZCI6dHJ1ZSwicmV0dXJuIjp7ImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0TWV0aG9kIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3RNZXRob2QiLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJNZXRob2QifSx7ImFyZ3VtZW50cyI6W3sia2luZCI6MzQsIm5hbWUiOiJvYmplY3QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRPYmplY3QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdCIsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJ0eXBlIjoiQW5vdGhlclR5cGUifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJraW5kIjoxOCwibmFtZSI6Im9iamVjdEFycmF5Iiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJvYmplY3RBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtpbmQiOjM0LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltBbm90aGVyVHlwZV0ifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sImtpbmQiOjE4LCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdE9iamVjdEFycmF5IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJbQW5vdGhlclR5cGVdIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9XSwiZW52Ijp7InJlcXVpcmVkIjpmYWxzZX0sImtpbmQiOjY0LCJuYW1lIjoib3B0aW9uYWxFbnZNZXRob2QiLCJyZXF1aXJlZCI6dHJ1ZSwicmV0dXJuIjp7ImtpbmQiOjM0LCJuYW1lIjoib3B0aW9uYWxFbnZNZXRob2QiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9wdGlvbmFsRW52TWV0aG9kIiwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJ0eXBlIjoiTWV0aG9kIn0seyJhcmd1bWVudHMiOlt7ImtpbmQiOjM0LCJuYW1lIjoiaWYiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6ImlmIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJlbHNlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiZWxzZSJ9XSwia2luZCI6NjQsIm5hbWUiOiJpZiIsInJlcXVpcmVkIjp0cnVlLCJyZXR1cm4iOnsia2luZCI6MzQsIm5hbWUiOiJpZiIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoiaWYiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6ImVsc2UifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJlbHNlIn0sInR5cGUiOiJNZXRob2QifV0sInR5cGUiOiJNb2R1bGUifSwib2JqZWN0VHlwZXMiOlt7ImtpbmQiOjEsInByb3BlcnRpZXMiOlt7ImtpbmQiOjM0LCJuYW1lIjoic3RyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoic3RyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRTdHIiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im9wdFN0ciIsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9LHsia2luZCI6MzQsIm5hbWUiOiJ1IiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludCJ9LCJ0eXBlIjoiVUludCJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRVIiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRVIiwidHlwZSI6IlVJbnQifSwidHlwZSI6IlVJbnQifSx7ImtpbmQiOjM0LCJuYW1lIjoidTgiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1OCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDgifSwidHlwZSI6IlVJbnQ4In0seyJraW5kIjozNCwibmFtZSI6InUxNiIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InUxNiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDE2In0sInR5cGUiOiJVSW50MTYifSx7ImtpbmQiOjM0LCJuYW1lIjoidTMyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidTMyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IlVJbnQzMiJ9LHsia2luZCI6MzQsIm5hbWUiOiJpIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiaSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJJbnQifSx7ImtpbmQiOjM0LCJuYW1lIjoiaTgiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJpOCIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50OCJ9LCJ0eXBlIjoiSW50OCJ9LHsia2luZCI6MzQsIm5hbWUiOiJpMTYiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJpMTYiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludDE2In0sInR5cGUiOiJJbnQxNiJ9LHsia2luZCI6MzQsIm5hbWUiOiJpMzIiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJpMzIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludDMyIn0sInR5cGUiOiJJbnQzMiJ9LHsia2luZCI6MzQsIm5hbWUiOiJiaWdpbnQiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJiaWdpbnQiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkJpZ0ludCJ9LCJ0eXBlIjoiQmlnSW50In0seyJraW5kIjozNCwibmFtZSI6Im9wdEJpZ2ludCIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0QmlnaW50IiwidHlwZSI6IkJpZ0ludCJ9LCJ0eXBlIjoiQmlnSW50In0seyJraW5kIjozNCwibmFtZSI6ImJpZ251bWJlciIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImJpZ251bWJlciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQmlnTnVtYmVyIn0sInR5cGUiOiJCaWdOdW1iZXIifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0QmlnbnVtYmVyIiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRCaWdudW1iZXIiLCJ0eXBlIjoiQmlnTnVtYmVyIn0sInR5cGUiOiJCaWdOdW1iZXIifSx7ImtpbmQiOjM0LCJuYW1lIjoianNvbiIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Impzb24iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkpTT04ifSwidHlwZSI6IkpTT04ifSx7ImtpbmQiOjM0LCJuYW1lIjoib3B0SnNvbiIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0SnNvbiIsInR5cGUiOiJKU09OIn0sInR5cGUiOiJKU09OIn0seyJraW5kIjozNCwibmFtZSI6ImJ5dGVzIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiYnl0ZXMiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkJ5dGVzIn0sInR5cGUiOiJCeXRlcyJ9LHsia2luZCI6MzQsIm5hbWUiOiJvcHRCeXRlcyIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoib3B0Qnl0ZXMiLCJ0eXBlIjoiQnl0ZXMifSwidHlwZSI6IkJ5dGVzIn0seyJraW5kIjozNCwibmFtZSI6ImJvb2xlYW4iLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJib29sZWFuIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJCb29sZWFuIn0sInR5cGUiOiJCb29sZWFuIn0seyJraW5kIjozNCwibmFtZSI6Im9wdEJvb2xlYW4iLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6Im9wdEJvb2xlYW4iLCJ0eXBlIjoiQm9vbGVhbiJ9LCJ0eXBlIjoiQm9vbGVhbiJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidV9hcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludCJ9LCJraW5kIjoxOCwibmFtZSI6InVfYXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1X2FycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50In0sInR5cGUiOiJbVUludF0ifSwia2luZCI6MzQsIm5hbWUiOiJ1X2FycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbVUludF0ifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6InVPcHRfYXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQifSwia2luZCI6MTgsIm5hbWUiOiJ1T3B0X2FycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1T3B0X2FycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50In0sInR5cGUiOiJbVUludF0ifSwia2luZCI6MzQsIm5hbWUiOiJ1T3B0X2FycmF5IiwidHlwZSI6IltVSW50XSJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoiX29wdF91T3B0QXJyYXkiLCJ0eXBlIjoiVUludCJ9LCJraW5kIjoxOCwibmFtZSI6Il9vcHRfdU9wdEFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJfb3B0X3VPcHRBcnJheSIsInR5cGUiOiJVSW50In0sInR5cGUiOiJbVUludF0ifSwia2luZCI6MzQsIm5hbWUiOiJfb3B0X3VPcHRBcnJheSIsInR5cGUiOiJbVUludF0ifSx7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6Im9wdFN0ck9wdEFycmF5IiwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoxOCwibmFtZSI6Im9wdFN0ck9wdEFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJvcHRTdHJPcHRBcnJheSIsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IltTdHJpbmddIn0sImtpbmQiOjM0LCJuYW1lIjoib3B0U3RyT3B0QXJyYXkiLCJ0eXBlIjoiW1N0cmluZ10ifSx7ImFycmF5Ijp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6InVBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50In0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludCJ9LCJ0eXBlIjoiW1VJbnRdIn0sIml0ZW0iOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InVBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50In0sInR5cGUiOiJbVUludF0ifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1tVSW50XV0ifSwia2luZCI6MzQsIm5hbWUiOiJ1QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1tVSW50XV0ifSx7ImFycmF5Ijp7ImFycmF5Ijp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6InVPcHRBcnJheU9wdEFycmF5IiwidHlwZSI6IlVJbnQzMiJ9LCJraW5kIjoxOCwibmFtZSI6InVPcHRBcnJheU9wdEFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1T3B0QXJyYXlPcHRBcnJheSIsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sIml0ZW0iOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidU9wdEFycmF5T3B0QXJyYXkiLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoidU9wdEFycmF5T3B0QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InVPcHRBcnJheU9wdEFycmF5IiwidHlwZSI6IlVJbnQzMiJ9LCJ0eXBlIjoiW1VJbnQzMl0ifSwia2luZCI6MTgsIm5hbWUiOiJ1T3B0QXJyYXlPcHRBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW1tVSW50MzJdXSJ9LCJraW5kIjozNCwibmFtZSI6InVPcHRBcnJheU9wdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbW1VJbnQzMl1dIn0seyJhcnJheSI6eyJhcnJheSI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJpdGVtIjp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJraW5kIjoxOCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInR5cGUiOiJbW1VJbnQzMl1dIn0sIml0ZW0iOnsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJ0eXBlIjoiW1VJbnQzMl0ifSwiaXRlbSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJ1QXJyYXlPcHRBcnJheUFycmF5IiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoidUFycmF5T3B0QXJyYXlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJraW5kIjoxOCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJ0eXBlIjoiW1tVSW50MzJdXSJ9LCJraW5kIjoxOCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbW1VJbnQzMl1dXSJ9LCJraW5kIjozNCwibmFtZSI6InVBcnJheU9wdEFycmF5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbW1VJbnQzMl1dXSJ9LHsiYXJyYXkiOnsiYXJyYXkiOnsiYXJyYXkiOnsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJpdGVtIjp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJ0eXBlIjoiW1VJbnQzMl0ifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbW1VJbnQzMl1dIn0sIml0ZW0iOnsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJpdGVtIjp7Iml0ZW0iOnsia2luZCI6NCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlVJbnQzMiJ9LCJ0eXBlIjoiW1VJbnQzMl0ifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbW1VJbnQzMl1dIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInR5cGUiOiJbW1tVSW50MzJdXV0ifSwiaXRlbSI6eyJhcnJheSI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sIml0ZW0iOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludDMyXV0ifSwiaXRlbSI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5Iiwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJjcmF6eUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJVSW50MzIifSwidHlwZSI6IltVSW50MzJdIn0sIml0ZW0iOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sImtpbmQiOjE4LCJuYW1lIjoiY3JhenlBcnJheSIsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiY3JhenlBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiVUludDMyIn0sInR5cGUiOiJbVUludDMyXSJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltbVUludDMyXV0ifSwia2luZCI6MTgsIm5hbWUiOiJjcmF6eUFycmF5IiwidHlwZSI6IltbW1VJbnQzMl1dXSJ9LCJraW5kIjoxOCwibmFtZSI6ImNyYXp5QXJyYXkiLCJ0eXBlIjoiW1tbW1VJbnQzMl1dXV0ifSwia2luZCI6MzQsIm5hbWUiOiJjcmF6eUFycmF5IiwidHlwZSI6IltbW1tVSW50MzJdXV1dIn0seyJraW5kIjozNCwibmFtZSI6Im9iamVjdCIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0seyJraW5kIjozNCwibmFtZSI6Im9wdE9iamVjdCIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0IiwidHlwZSI6IkFub3RoZXJUeXBlIn0sInR5cGUiOiJBbm90aGVyVHlwZSJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoib2JqZWN0QXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sImtpbmQiOjE4LCJuYW1lIjoib2JqZWN0QXJyYXkiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im9iamVjdEFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltBbm90aGVyVHlwZV0ifSwia2luZCI6MzQsIm5hbWUiOiJvYmplY3RBcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9LHsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwia2luZCI6MTgsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoib3B0T2JqZWN0QXJyYXkiLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwidHlwZSI6IltBbm90aGVyVHlwZV0ifSwia2luZCI6MzQsIm5hbWUiOiJvcHRPYmplY3RBcnJheSIsInR5cGUiOiJbQW5vdGhlclR5cGVdIn0seyJlbnVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW4iLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkN1c3RvbUVudW0ifSwia2luZCI6MzQsIm5hbWUiOiJlbiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LHsiZW51bSI6eyJraW5kIjoxNjM4NCwibmFtZSI6Im9wdEVudW0iLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LCJraW5kIjozNCwibmFtZSI6Im9wdEVudW0iLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LHsiYXJyYXkiOnsiZW51bSI6eyJraW5kIjoxNjM4NCwibmFtZSI6ImVudW1BcnJheSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LCJpdGVtIjp7ImtpbmQiOjE2Mzg0LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJDdXN0b21FbnVtIn0sImtpbmQiOjE4LCJuYW1lIjoiZW51bUFycmF5IiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQ3VzdG9tRW51bV0ifSwia2luZCI6MzQsIm5hbWUiOiJlbnVtQXJyYXkiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IltDdXN0b21FbnVtXSJ9LHsiYXJyYXkiOnsiZW51bSI6eyJraW5kIjoxNjM4NCwibmFtZSI6Im9wdEVudW1BcnJheSIsInR5cGUiOiJDdXN0b21FbnVtIn0sIml0ZW0iOnsia2luZCI6MTYzODQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiQ3VzdG9tRW51bSJ9LCJraW5kIjoxOCwibmFtZSI6Im9wdEVudW1BcnJheSIsInR5cGUiOiJbQ3VzdG9tRW51bV0ifSwia2luZCI6MzQsIm5hbWUiOiJvcHRFbnVtQXJyYXkiLCJ0eXBlIjoiW0N1c3RvbUVudW1dIn0seyJraW5kIjozNCwibWFwIjp7ImtleSI6eyJraW5kIjo0LCJuYW1lIjoibWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwia2luZCI6MjYyMTQ2LCJuYW1lIjoibWFwIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoibWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifSwidHlwZSI6Ik1hcDxTdHJpbmcsIEludD4iLCJ2YWx1ZSI6eyJraW5kIjo0LCJuYW1lIjoibWFwIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJJbnQifX0sIm5hbWUiOiJtYXAiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIEludD4ifSx7ImtpbmQiOjM0LCJtYXAiOnsiYXJyYXkiOnsiaXRlbSI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJraW5kIjoxOCwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkludCJ9LCJ0eXBlIjoiW0ludF0ifSwia2V5Ijp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjI2MjE0NiwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBbSW50XT4iLCJ2YWx1ZSI6eyJpdGVtIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sImtpbmQiOjE4LCJuYW1lIjoibWFwT2ZBcnIiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZkFyciIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiSW50In0sInR5cGUiOiJbSW50XSJ9fSwibmFtZSI6Im1hcE9mQXJyIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBbSW50XT4ifSx7ImtpbmQiOjM0LCJtYXAiOnsia2V5Ijp7ImtpbmQiOjQsIm5hbWUiOiJtYXBPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjI2MjE0NiwibmFtZSI6Im1hcE9mT2JqIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBBbm90aGVyVHlwZT4iLCJ2YWx1ZSI6eyJraW5kIjo4MTkyLCJuYW1lIjoibWFwT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn19LCJuYW1lIjoibWFwT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIEFub3RoZXJUeXBlPiJ9LHsia2luZCI6MzQsIm1hcCI6eyJhcnJheSI6eyJpdGVtIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJBbm90aGVyVHlwZSJ9LCJraW5kIjoxOCwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiW0Fub3RoZXJUeXBlXSJ9LCJrZXkiOnsia2luZCI6NCwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IlN0cmluZyJ9LCJraW5kIjoyNjIxNDYsIm5hbWUiOiJtYXBPZkFyck9mT2JqIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBbQW5vdGhlclR5cGVdPiIsInZhbHVlIjp7Iml0ZW0iOnsia2luZCI6ODE5MiwibmFtZSI6Im1hcE9mQXJyT2ZPYmoiLCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6IkFub3RoZXJUeXBlIn0sImtpbmQiOjE4LCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsIm9iamVjdCI6eyJraW5kIjo4MTkyLCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiQW5vdGhlclR5cGUifSwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJbQW5vdGhlclR5cGVdIn19LCJuYW1lIjoibWFwT2ZBcnJPZk9iaiIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiTWFwPFN0cmluZywgW0Fub3RoZXJUeXBlXT4ifSx7ImtpbmQiOjM0LCJtYXAiOnsia2V5Ijp7ImtpbmQiOjQsIm5hbWUiOiJtYXBDdXN0b21WYWx1ZSIsInJlcXVpcmVkIjp0cnVlLCJ0eXBlIjoiU3RyaW5nIn0sImtpbmQiOjI2MjE0NiwibmFtZSI6Im1hcEN1c3RvbVZhbHVlIiwib2JqZWN0Ijp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBDdXN0b21WYWx1ZSIsInR5cGUiOiJDdXN0b21NYXBWYWx1ZSJ9LCJyZXF1aXJlZCI6dHJ1ZSwidHlwZSI6Ik1hcDxTdHJpbmcsIEN1c3RvbU1hcFZhbHVlPiIsInZhbHVlIjp7ImtpbmQiOjgxOTIsIm5hbWUiOiJtYXBDdXN0b21WYWx1ZSIsInR5cGUiOiJDdXN0b21NYXBWYWx1ZSJ9fSwibmFtZSI6Im1hcEN1c3RvbVZhbHVlIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJNYXA8U3RyaW5nLCBDdXN0b21NYXBWYWx1ZT4ifV0sInR5cGUiOiJDdXN0b21UeXBlIn0seyJraW5kIjoxLCJwcm9wZXJ0aWVzIjpbeyJraW5kIjozNCwibmFtZSI6InByb3AiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6InByb3AiLCJ0eXBlIjoiU3RyaW5nIn0sInR5cGUiOiJTdHJpbmcifSx7ImtpbmQiOjM0LCJuYW1lIjoiY2lyY3VsYXIiLCJvYmplY3QiOnsia2luZCI6ODE5MiwibmFtZSI6ImNpcmN1bGFyIiwidHlwZSI6IkN1c3RvbVR5cGUifSwidHlwZSI6IkN1c3RvbVR5cGUifSx7ImtpbmQiOjM0LCJuYW1lIjoiY29uc3QiLCJzY2FsYXIiOnsia2luZCI6NCwibmFtZSI6ImNvbnN0IiwidHlwZSI6IlN0cmluZyJ9LCJ0eXBlIjoiU3RyaW5nIn1dLCJ0eXBlIjoiQW5vdGhlclR5cGUifSx7ImtpbmQiOjEsInByb3BlcnRpZXMiOlt7ImtpbmQiOjM0LCJuYW1lIjoiZm9vIiwicmVxdWlyZWQiOnRydWUsInNjYWxhciI6eyJraW5kIjo0LCJuYW1lIjoiZm9vIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9XSwidHlwZSI6IkN1c3RvbU1hcFZhbHVlIn0seyJraW5kIjoxLCJwcm9wZXJ0aWVzIjpbeyJraW5kIjozNCwibmFtZSI6ImVsc2UiLCJyZXF1aXJlZCI6dHJ1ZSwic2NhbGFyIjp7ImtpbmQiOjQsIm5hbWUiOiJlbHNlIiwicmVxdWlyZWQiOnRydWUsInR5cGUiOiJTdHJpbmcifSwidHlwZSI6IlN0cmluZyJ9XSwidHlwZSI6ImVsc2UifV0sInZlcnNpb24iOiIwLjEifQ==").decode("utf-8")) manifest = WrapManifest.parse_obj({ "name": "Test", diff --git a/packages/test-cases/cases/bind/sanity/output/plugin-rs/module.rs b/packages/test-cases/cases/bind/sanity/output/plugin-rs/module.rs index 13a34bfe19..c2cef1d87d 100644 --- a/packages/test-cases/cases/bind/sanity/output/plugin-rs/module.rs +++ b/packages/test-cases/cases/bind/sanity/output/plugin-rs/module.rs @@ -11,31 +11,45 @@ use super::types::*; #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ArgsModuleMethod { pub str: String, + #[serde(rename = "optStr")] pub opt_str: Option, pub en: CustomEnum, + #[serde(rename = "optEnum")] pub opt_enum: Option, + #[serde(rename = "enumArray")] pub enum_array: Vec, + #[serde(rename = "optEnumArray")] pub opt_enum_array: Option>>, pub map: Map, + #[serde(rename = "mapOfArr")] pub map_of_arr: Map>, + #[serde(rename = "mapOfMap")] pub map_of_map: Map>, + #[serde(rename = "mapOfObj")] pub map_of_obj: Map, + #[serde(rename = "mapOfArrOfObj")] pub map_of_arr_of_obj: Map>, } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ArgsObjectMethod { pub object: AnotherType, + #[serde(rename = "optObject")] pub opt_object: Option, + #[serde(rename = "objectArray")] pub object_array: Vec, + #[serde(rename = "optObjectArray")] pub opt_object_array: Option>>, } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ArgsOptionalEnvMethod { pub object: AnotherType, + #[serde(rename = "optObject")] pub opt_object: Option, + #[serde(rename = "objectArray")] pub object_array: Vec, + #[serde(rename = "optObjectArray")] pub opt_object_array: Option>>, } diff --git a/packages/test-cases/cases/bind/sanity/output/plugin-rs/types.rs b/packages/test-cases/cases/bind/sanity/output/plugin-rs/types.rs index 67e2f1be85..5fa5328f10 100644 --- a/packages/test-cases/cases/bind/sanity/output/plugin-rs/types.rs +++ b/packages/test-cases/cases/bind/sanity/output/plugin-rs/types.rs @@ -18,7 +18,9 @@ use polywrap_plugin::error::PluginError; #[derive(Clone, Debug, Deserialize, Serialize)] pub struct Env { pub prop: String, + #[serde(rename = "optProp")] pub opt_prop: Option, + #[serde(rename = "optMap")] pub opt_map: Option>>, } // Env END // @@ -28,8 +30,10 @@ pub struct Env { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct CustomType { pub str: String, + #[serde(rename = "optStr")] pub opt_str: Option, pub u: u32, + #[serde(rename = "optU")] pub opt_u: Option, pub u8: u8, pub u16: u16, @@ -39,35 +43,57 @@ pub struct CustomType { pub i16: i16, pub i32: i32, pub bigint: BigInt, + #[serde(rename = "optBigint")] pub opt_bigint: Option, pub bignumber: BigNumber, + #[serde(rename = "optBignumber")] pub opt_bignumber: Option, pub json: JSON::Value, + #[serde(rename = "optJson")] pub opt_json: Option, pub bytes: Vec, + #[serde(rename = "optBytes")] pub opt_bytes: Option>, pub boolean: bool, + #[serde(rename = "optBoolean")] pub opt_boolean: Option, pub u_array: Vec, + #[serde(rename = "uOpt_array")] pub u_opt_array: Option>, - pub opt_u_opt_array: Option>>, + #[serde(rename = "_opt_uOptArray")] + pub _opt_u_opt_array: Option>>, + #[serde(rename = "optStrOptArray")] pub opt_str_opt_array: Option>>, + #[serde(rename = "uArrayArray")] pub u_array_array: Vec>, + #[serde(rename = "uOptArrayOptArray")] pub u_opt_array_opt_array: Vec>>>, + #[serde(rename = "uArrayOptArrayArray")] pub u_array_opt_array_array: Vec>>>, + #[serde(rename = "crazyArray")] pub crazy_array: Option>>>>>>, pub object: AnotherType, + #[serde(rename = "optObject")] pub opt_object: Option, + #[serde(rename = "objectArray")] pub object_array: Vec, + #[serde(rename = "optObjectArray")] pub opt_object_array: Option>>, pub en: CustomEnum, + #[serde(rename = "optEnum")] pub opt_enum: Option, + #[serde(rename = "enumArray")] pub enum_array: Vec, + #[serde(rename = "optEnumArray")] pub opt_enum_array: Option>>, pub map: Map, + #[serde(rename = "mapOfArr")] pub map_of_arr: Map>, + #[serde(rename = "mapOfObj")] pub map_of_obj: Map, + #[serde(rename = "mapOfArrOfObj")] pub map_of_arr_of_obj: Map>, + #[serde(rename = "mapCustomValue")] pub map_custom_value: Map>, } #[derive(Clone, Debug, Deserialize, Serialize)] @@ -109,12 +135,18 @@ pub enum While { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct TestImportObject { pub object: TestImportAnotherObject, + #[serde(rename = "optObject")] pub opt_object: Option, + #[serde(rename = "objectArray")] pub object_array: Vec, + #[serde(rename = "optObjectArray")] pub opt_object_array: Option>>, pub en: TestImportEnum, + #[serde(rename = "optEnum")] pub opt_enum: Option, + #[serde(rename = "enumArray")] pub enum_array: Vec, + #[serde(rename = "optEnumArray")] pub opt_enum_array: Option>>, } #[derive(Clone, Debug, Deserialize, Serialize)] @@ -149,17 +181,26 @@ pub enum TestImportEnumReturn { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct TestImportModuleArgsImportedMethod { pub str: String, + #[serde(rename = "optStr")] pub opt_str: Option, pub u: u32, + #[serde(rename = "optU")] pub opt_u: Option, + #[serde(rename = "uArrayArray")] pub u_array_array: Vec>>>, pub object: TestImportObject, + #[serde(rename = "optObject")] pub opt_object: Option, + #[serde(rename = "objectArray")] pub object_array: Vec, + #[serde(rename = "optObjectArray")] pub opt_object_array: Option>>, pub en: TestImportEnum, + #[serde(rename = "optEnum")] pub opt_enum: Option, + #[serde(rename = "enumArray")] pub enum_array: Vec, + #[serde(rename = "optEnumArray")] pub opt_enum_array: Option>>, } diff --git a/packages/test-cases/cases/bind/sanity/output/plugin-rs/wrap.info.rs b/packages/test-cases/cases/bind/sanity/output/plugin-rs/wrap.info.rs index f96a902634..1df571de16 100644 --- a/packages/test-cases/cases/bind/sanity/output/plugin-rs/wrap.info.rs +++ b/packages/test-cases/cases/bind/sanity/output/plugin-rs/wrap.info.rs @@ -1460,23 +1460,23 @@ pub fn get_manifest() -> WrapManifest { "array": { "item": { "kind": 4, - "name": "uArray", + "name": "u_array", "required": true, "type": "UInt" }, "kind": 18, - "name": "uArray", + "name": "u_array", "required": true, "scalar": { "kind": 4, - "name": "uArray", + "name": "u_array", "required": true, "type": "UInt" }, "type": "[UInt]" }, "kind": 34, - "name": "uArray", + "name": "u_array", "required": true, "type": "[UInt]" }, @@ -1484,42 +1484,42 @@ pub fn get_manifest() -> WrapManifest { "array": { "item": { "kind": 4, - "name": "uOptArray", + "name": "uOpt_array", "required": true, "type": "UInt" }, "kind": 18, - "name": "uOptArray", + "name": "uOpt_array", "scalar": { "kind": 4, - "name": "uOptArray", + "name": "uOpt_array", "required": true, "type": "UInt" }, "type": "[UInt]" }, "kind": 34, - "name": "uOptArray", + "name": "uOpt_array", "type": "[UInt]" }, { "array": { "item": { "kind": 4, - "name": "optUOptArray", + "name": "_opt_uOptArray", "type": "UInt" }, "kind": 18, - "name": "optUOptArray", + "name": "_opt_uOptArray", "scalar": { "kind": 4, - "name": "optUOptArray", + "name": "_opt_uOptArray", "type": "UInt" }, "type": "[UInt]" }, "kind": 34, - "name": "optUOptArray", + "name": "_opt_uOptArray", "type": "[UInt]" }, { diff --git a/packages/test-cases/cases/bind/sanity/output/plugin-ts/types.ts b/packages/test-cases/cases/bind/sanity/output/plugin-ts/types.ts index 2c19aa819b..428ddf9e92 100644 --- a/packages/test-cases/cases/bind/sanity/output/plugin-ts/types.ts +++ b/packages/test-cases/cases/bind/sanity/output/plugin-ts/types.ts @@ -58,9 +58,9 @@ export interface CustomType { optBytes?: Types.Bytes | null; boolean: Types.Boolean; optBoolean?: Types.Boolean | null; - uArray: Array; - uOptArray?: Array | null; - optUOptArray?: Array | null; + u_array: Array; + uOpt_array?: Array | null; + _opt_uOptArray?: Array | null; optStrOptArray?: Array | null; uArrayArray: Array>; uOptArrayOptArray: Array | null>; diff --git a/packages/test-cases/cases/bind/sanity/output/plugin-ts/wrap.info.ts b/packages/test-cases/cases/bind/sanity/output/plugin-ts/wrap.info.ts index c0569780a7..c8ad69aab1 100644 --- a/packages/test-cases/cases/bind/sanity/output/plugin-ts/wrap.info.ts +++ b/packages/test-cases/cases/bind/sanity/output/plugin-ts/wrap.info.ts @@ -1458,23 +1458,23 @@ export const manifest: WrapManifest = { "array": { "item": { "kind": 4, - "name": "uArray", + "name": "u_array", "required": true, "type": "UInt" }, "kind": 18, - "name": "uArray", + "name": "u_array", "required": true, "scalar": { "kind": 4, - "name": "uArray", + "name": "u_array", "required": true, "type": "UInt" }, "type": "[UInt]" }, "kind": 34, - "name": "uArray", + "name": "u_array", "required": true, "type": "[UInt]" }, @@ -1482,42 +1482,42 @@ export const manifest: WrapManifest = { "array": { "item": { "kind": 4, - "name": "uOptArray", + "name": "uOpt_array", "required": true, "type": "UInt" }, "kind": 18, - "name": "uOptArray", + "name": "uOpt_array", "scalar": { "kind": 4, - "name": "uOptArray", + "name": "uOpt_array", "required": true, "type": "UInt" }, "type": "[UInt]" }, "kind": 34, - "name": "uOptArray", + "name": "uOpt_array", "type": "[UInt]" }, { "array": { "item": { "kind": 4, - "name": "optUOptArray", + "name": "_opt_uOptArray", "type": "UInt" }, "kind": 18, - "name": "optUOptArray", + "name": "_opt_uOptArray", "scalar": { "kind": 4, - "name": "optUOptArray", + "name": "_opt_uOptArray", "type": "UInt" }, "type": "[UInt]" }, "kind": 34, - "name": "optUOptArray", + "name": "_opt_uOptArray", "type": "[UInt]" }, { diff --git a/packages/test-cases/cases/bind/sanity/output/wasm-as/CustomType/index.ts b/packages/test-cases/cases/bind/sanity/output/wasm-as/CustomType/index.ts index 64b2cdf31c..3a0d39079e 100644 --- a/packages/test-cases/cases/bind/sanity/output/wasm-as/CustomType/index.ts +++ b/packages/test-cases/cases/bind/sanity/output/wasm-as/CustomType/index.ts @@ -36,9 +36,9 @@ export class CustomType { optBytes: ArrayBuffer | null; _boolean: bool; optBoolean: Box | null; - uArray: Array; - uOptArray: Array | null; - optUOptArray: Array | null> | null; + u_array: Array; + uOpt_array: Array | null; + _opt_uOptArray: Array | null> | null; optStrOptArray: Array | null; uArrayArray: Array>; uOptArrayOptArray: Array | null> | null>; diff --git a/packages/test-cases/cases/bind/sanity/output/wasm-as/CustomType/serialization.ts b/packages/test-cases/cases/bind/sanity/output/wasm-as/CustomType/serialization.ts index b555b83786..fa047d5f7d 100644 --- a/packages/test-cases/cases/bind/sanity/output/wasm-as/CustomType/serialization.ts +++ b/packages/test-cases/cases/bind/sanity/output/wasm-as/CustomType/serialization.ts @@ -110,21 +110,21 @@ export function writeCustomType(writer: Write, type: CustomType): void { writer.writeString("optBoolean"); writer.writeOptionalBool(type.optBoolean); writer.context().pop(); - writer.context().push("uArray", "Array", "writing property"); - writer.writeString("uArray"); - writer.writeArray(type.uArray, (writer: Write, item: u32): void => { + writer.context().push("u_array", "Array", "writing property"); + writer.writeString("u_array"); + writer.writeArray(type.u_array, (writer: Write, item: u32): void => { writer.writeUInt32(item); }); writer.context().pop(); - writer.context().push("uOptArray", "Array | null", "writing property"); - writer.writeString("uOptArray"); - writer.writeOptionalArray(type.uOptArray, (writer: Write, item: u32): void => { + writer.context().push("uOpt_array", "Array | null", "writing property"); + writer.writeString("uOpt_array"); + writer.writeOptionalArray(type.uOpt_array, (writer: Write, item: u32): void => { writer.writeUInt32(item); }); writer.context().pop(); - writer.context().push("optUOptArray", "Array | null> | null", "writing property"); - writer.writeString("optUOptArray"); - writer.writeOptionalArray(type.optUOptArray, (writer: Write, item: Box | null): void => { + writer.context().push("_opt_uOptArray", "Array | null> | null", "writing property"); + writer.writeString("_opt_uOptArray"); + writer.writeOptionalArray(type._opt_uOptArray, (writer: Write, item: Box | null): void => { writer.writeOptionalUInt32(item); }); writer.context().pop(); @@ -314,10 +314,10 @@ export function readCustomType(reader: Read): CustomType { let _boolean: bool = false; let _booleanSet: bool = false; let _optBoolean: Box | null = null; - let _uArray: Array = []; - let _uArraySet: bool = false; - let _uOptArray: Array | null = null; - let _optUOptArray: Array | null> | null = null; + let _u_array: Array = []; + let _u_arraySet: bool = false; + let _uOpt_array: Array | null = null; + let __opt_uOptArray: Array | null> | null = null; let _optStrOptArray: Array | null = null; let _uArrayArray: Array> = []; let _uArrayArraySet: bool = false; @@ -473,24 +473,24 @@ export function readCustomType(reader: Read): CustomType { _optBoolean = reader.readOptionalBool(); reader.context().pop(); } - else if (field == "uArray") { + else if (field == "u_array") { reader.context().push(field, "Array", "type found, reading property"); - _uArray = reader.readArray((reader: Read): u32 => { + _u_array = reader.readArray((reader: Read): u32 => { return reader.readUInt32(); }); - _uArraySet = true; + _u_arraySet = true; reader.context().pop(); } - else if (field == "uOptArray") { + else if (field == "uOpt_array") { reader.context().push(field, "Array | null", "type found, reading property"); - _uOptArray = reader.readOptionalArray((reader: Read): u32 => { + _uOpt_array = reader.readOptionalArray((reader: Read): u32 => { return reader.readUInt32(); }); reader.context().pop(); } - else if (field == "optUOptArray") { + else if (field == "_opt_uOptArray") { reader.context().push(field, "Array | null> | null", "type found, reading property"); - _optUOptArray = reader.readOptionalArray((reader: Read): Box | null => { + __opt_uOptArray = reader.readOptionalArray((reader: Read): Box | null => { return reader.readOptionalUInt32(); }); reader.context().pop(); @@ -758,8 +758,8 @@ export function readCustomType(reader: Read): CustomType { if (!_booleanSet) { throw new Error(reader.context().printWithContext("Missing required property: 'boolean: Boolean'")); } - if (!_uArraySet) { - throw new Error(reader.context().printWithContext("Missing required property: 'uArray: [UInt]'")); + if (!_u_arraySet) { + throw new Error(reader.context().printWithContext("Missing required property: 'u_array: [UInt]'")); } if (!_uArrayArraySet) { throw new Error(reader.context().printWithContext("Missing required property: 'uArrayArray: [[UInt]]'")); @@ -820,9 +820,9 @@ export function readCustomType(reader: Read): CustomType { optBytes: _optBytes, _boolean: _boolean, optBoolean: _optBoolean, - uArray: _uArray, - uOptArray: _uOptArray, - optUOptArray: _optUOptArray, + u_array: _u_array, + uOpt_array: _uOpt_array, + _opt_uOptArray: __opt_uOptArray, optStrOptArray: _optStrOptArray, uArrayArray: _uArrayArray, uOptArrayOptArray: _uOptArrayOptArray, diff --git a/packages/test-cases/cases/bind/sanity/output/wasm-rs/custom_type/mod.rs b/packages/test-cases/cases/bind/sanity/output/wasm-rs/custom_type/mod.rs index aae2ab3e1d..a15c664dc8 100644 --- a/packages/test-cases/cases/bind/sanity/output/wasm-rs/custom_type/mod.rs +++ b/packages/test-cases/cases/bind/sanity/output/wasm-rs/custom_type/mod.rs @@ -46,7 +46,7 @@ pub struct CustomType { pub opt_boolean: Option, pub u_array: Vec, pub u_opt_array: Option>, - pub opt_u_opt_array: Option>>, + pub _opt_u_opt_array: Option>>, pub opt_str_opt_array: Option>>, pub u_array_array: Vec>, pub u_opt_array_opt_array: Vec>>>, @@ -93,7 +93,7 @@ impl CustomType { opt_boolean: None, u_array: vec![], u_opt_array: None, - opt_u_opt_array: None, + _opt_u_opt_array: None, opt_str_opt_array: None, u_array_array: vec![], u_opt_array_opt_array: vec![], diff --git a/packages/test-cases/cases/bind/sanity/output/wasm-rs/custom_type/serialization.rs b/packages/test-cases/cases/bind/sanity/output/wasm-rs/custom_type/serialization.rs index 4626afe640..a9faa0a662 100644 --- a/packages/test-cases/cases/bind/sanity/output/wasm-rs/custom_type/serialization.rs +++ b/packages/test-cases/cases/bind/sanity/output/wasm-rs/custom_type/serialization.rs @@ -116,21 +116,21 @@ pub fn write_custom_type(args: &CustomType, writer: &mut W) -> Result< writer.write_string("optBoolean")?; writer.write_optional_bool(&args.opt_boolean)?; writer.context().pop(); - writer.context().push("uArray", "Vec", "writing property"); - writer.write_string("uArray")?; + writer.context().push("u_array", "Vec", "writing property"); + writer.write_string("u_array")?; writer.write_array(&args.u_array, |writer, item| { writer.write_u32(item) })?; writer.context().pop(); - writer.context().push("uOptArray", "Option>", "writing property"); - writer.write_string("uOptArray")?; + writer.context().push("uOpt_array", "Option>", "writing property"); + writer.write_string("uOpt_array")?; writer.write_optional_array(&args.u_opt_array, |writer, item| { writer.write_u32(item) })?; writer.context().pop(); - writer.context().push("optUOptArray", "Option>>", "writing property"); - writer.write_string("optUOptArray")?; - writer.write_optional_array(&args.opt_u_opt_array, |writer, item| { + writer.context().push("_opt_uOptArray", "Option>>", "writing property"); + writer.write_string("_opt_uOptArray")?; + writer.write_optional_array(&args._opt_u_opt_array, |writer, item| { writer.write_optional_u32(item) })?; writer.context().pop(); @@ -325,7 +325,7 @@ pub fn read_custom_type(reader: &mut R) -> Result = vec![]; let mut _u_array_set = false; let mut _u_opt_array: Option> = None; - let mut _opt_u_opt_array: Option>> = None; + let mut __opt_u_opt_array: Option>> = None; let mut _opt_str_opt_array: Option>> = None; let mut _u_array_array: Vec> = vec![]; let mut _u_array_array_set = false; @@ -481,7 +481,7 @@ pub fn read_custom_type(reader: &mut R) -> Result { + "u_array" => { reader.context().push(&field, "Vec", "type found, reading property"); _u_array = reader.read_array(|reader| { reader.read_u32() @@ -489,16 +489,16 @@ pub fn read_custom_type(reader: &mut R) -> Result { + "uOpt_array" => { reader.context().push(&field, "Option>", "type found, reading property"); _u_opt_array = reader.read_optional_array(|reader| { reader.read_u32() })?; reader.context().pop(); } - "optUOptArray" => { + "_opt_uOptArray" => { reader.context().push(&field, "Option>>", "type found, reading property"); - _opt_u_opt_array = reader.read_optional_array(|reader| { + __opt_u_opt_array = reader.read_optional_array(|reader| { reader.read_optional_u32() })?; reader.context().pop(); @@ -765,7 +765,7 @@ pub fn read_custom_type(reader: &mut R) -> Result(reader: &mut R) -> Result